10

いくつかの値のエンディアンを交換する必要があり、Objective-C で利用可能なものがあるかどうか疑問に思いました。現在、以下の CStyle 関数でバイトを交換しています (これは明らかに再利用できます)。行方不明だった?

float floatFlip(float inFloat) {
    union {
        int intValue;
        float newFloat;
    } inData, outData;

    inData.newFloat = inFloat;
    outData.intValue = CFSwapInt32BigToHost(inData.intValue);
    return(outData.newFloat);
}

EDIT_001

ここのポインターのおかげで、整数がソートされました。フロートを交換する最も簡単な方法は何ですか?

int myInteger = CFSwapInt32BigToHost(myInteger);

(上記のコードを更新)

float myFloat = floatFlip(myFloat);

ゲイリー

4

3 に答える 3

10

前述の API の他に、 CoreFoundation/ CFByteOrder.hがあります。

于 2009-12-10T22:02:32.540 に答える
5

OSSwapInt32()(またはOSSwapInt16()、、など)を探していますOSSwapInt64()OSByteOrder.hを参照してください。

また、これらは移植性がないことに注意してください。ビッグエンディアンにのみ変換する場合はhtonl()、標準ライブラリに含まれている などの使用を検討することをお勧めします<arpa/inet.h>。(残念ながら、単純に前後に交換するための標準ライブラリはありません。)

于 2009-12-10T21:57:34.187 に答える
2

見つかりましたか

Endian.h    
OSByteOrder.h
于 2009-12-10T21:50:49.210 に答える