struct.unpack
Python の関数と同様に、C++ のバイナリ データから float または double を読み取ることができる必要があります。私の問題は、受信するデータが常にビッグエンディアンになることです。here で説明されているように、整数値に対してこれを処理しましたが、バイトごとに作業すると、浮動小数点値では機能しません。Python で使用する方法と同様に、C++ で浮動小数点値 (32 ビットfloat
と 64 ビットの両方) を抽出する方法が必要です。double
struct.unpack(">f", num)
struct.unpack(">d", num)
これが私が試したものの例です:
stuct.unpack("d", num) ==> *(double*) str; // if str is a char* containing the data
リトル エンディアンの場合str
は問題なく動作しますが、ビッグ エンディアンの場合はそうではありません。問題は、環境のネイティブ エンディアンがどうなるかわからないことです。そのため、バイナリ データを常にビッグ エンディアンとして抽出できる必要があります。
リンクされた質問を見ると、これは整数値に対してビットごとの論理和とビットシフトを簡単に使用していることがわかりますが、その方法は浮動小数点に対しては機能しません。
注意先に指摘しておくべきでしたが、c++11 や Boost 以外のサードパーティ製ライブラリは使用できません。