0

ビッグエンディアンのバイトオーダーで64ビットのfloat( "doubles")で構成されている可能性のあるバイナリデータを読み込んでいます。NSDataのgetBytes:range:メソッドを使用して、Float64型のバッファーに個別に読み込みました。次に、バイト順序をリトルエンディアンに変更します。整数の場合、これはCore-Foundation関数CFSwapIntXX()を使用して簡単に実行できます。XXはビット数です。ただし、フロートに対応するメソッドはありません。これを行うための好ましい方法は何ですか?

64ビットのdoubleを関数CFSwapInt64()の引数として、以前にint64_t変数にメンプコピーしてから、再びdouble値に戻すことで、「強制」しようとしました。正しく動作しますが、これは私にはかなり残酷に思えます。標準フレームワークに付属している方法はありませんか?

4

1 に答える 1

1

floatの直接サポートは、プラットフォームに依存しない形式を使用します。ByteOrderUtilitiesを参照してください。ただし、それを行う方法は問題ありません。スワップ関数の「整数」は関係ありません。関数は、それらのバイトがどのように解釈されるかに関係なく、非常に多くのバイトで動作します。

醜いバイトコピーを避けるために、union:を使用できます。

typedef union { Float64 floatValue; int64_t intValue; } FloatBuffer;

これを入力し、フィールドを使用してバイトスワップし、intValueフィールドを使用して値を読み取りfloatValueます。

于 2012-10-04T02:30:51.140 に答える