私はバイナリファイルリーダー/ライターを書いていますが、エンディアンの問題を処理するために、すべてのデータを書き込み時に「ネットワーク」(ビッグ) エンディアンに変換し、読み取り時にホストエンディアンに変換することにしました。hton*
それらの機能だけのためにwinsockとリンクしたくないので避けています。
私の混乱の主なポイントは、浮動小数点値の処理方法にあります。すべての整数値について、<cstdint>
(uint32_t
など) でサイズ指定された型を使用していますが、私の調査では、浮動小数点型に相当するものは存在しません。書き込み時にすべての浮動小数点値を 32 ビット表現に変換し、ホストで使用されている精度に戻します (私のアプリケーションでは 32 ビットで十分です)。このようにして、浮動小数点値に対して読み書きするバイト数を正確に知ることができます。ファイルをロードしているマシンと、ファイルを書き込んだマシンで使用sizeof(float)
して異なっていた場合とは対照的です。sizeof(float)
frexp
を使用して仮数と指数を整数項で取得し、それらの整数を (固定サイズで) 書き出し、次に整数を読み取り、 を使用して浮動小数点値を再構築する可能性を認識しましldexp
た。これは有望に見えますが、/なしで float エンディアンを処理するための一般的に受け入れられている、または推奨されている方法があるかどうか疑問に思っていhtonf
ntohf
ます。
私がターゲットとするプラットフォームはほぼ確実float
に 32 ビットで表現されることはわかっていますが、将来のプロジェクトで使用できるように、現在記述しているコードを可能な限り互換性のあるものにしたいと考えています。