在Objective-C中交换Endianness?

fuz*_*oat 10 objective-c endianness

我需要交换一些值的字节顺序,只是想知道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);
}
Run Code Online (Sandbox Code Playgroud)

EDIT_001

感谢这里的指针,我有整数排序,最简单的交换浮点数的方法是什么?

int myInteger = CFSwapInt32BigToHost(myInteger);
Run Code Online (Sandbox Code Playgroud)

(以上代码更新)

float myFloat = floatFlip(myFloat);
Run Code Online (Sandbox Code Playgroud)

加里

Ste*_*non 10

除了已经提到的API之外,还有CoreFoundation/CFByteOrder.h.


Mic*_*ael 5

您正在寻找OSSwapInt32()(或OSSwapInt16(),OSSwapInt64()等等).请参见OSByteOrder.h.

另请注意,这些都是不便携的.如果您只是转换为big-endian,您可能需要考虑使用htonl()标准库中包含的内容<arpa/inet.h>.(不幸的是,没有标准的库可以简单地来回交换.)