2009-12-10 87 views
9

我需要交换一些值的字节顺序,只是想知道在Objective-C中是否有任何可用的东西,目前我正在用下面的CStyle函数交换字节(显然我可以重用),我只是想检查什么都没有具体我失踪了?在Objective-C中交换字节顺序?

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); 

加里

+0

floatFlip()看起来不错。我会(亲自)将函数名和参数写入固定宽度的Float32 Float32Flip(Float32 inFloat){union {SInt32 intValue; Float32 newFloat; } inData,outData; ...},但我很奇怪。如果你使用的是C++,那么我会通过引用传递(为了编译器对你的字节数进行检查),或者(C/objc)传递一个指针,因为你主要关心参数的字节交换,而不是一个潜在转换/截断/重新解释值的字节交换。 – justin 2009-12-12 05:29:11

回答

10

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

2

你有没有发现

Endian.h  
OSByteOrder.h 
5

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

另外请注意,这些是不可移植的。如果您只是转换为big-endian,您可能需要考虑使用htonl()之类的东西,它包含在标准库<arpa/inet.h>中。 (但是,不幸的是,没有用于简单地交换来回的标准库。)