Objective-C中的位转换工具

时间:2011-12-18 15:52:46

标签: iphone objective-c ios bit-manipulation endianness

iOS的objective-c库中是否有内置的实用程序或宏,允许您在字节数方面转换字节和从整数转换字节?

请不要告诉我使用位移操作。我试图避免编写自定义代码来执行此操作,如果它已经存在。

我希望代码将NSData *转换为原始类型(int,uint,short等)并将原始类型转换回NSData *。

2 个答案:

答案 0 :(得分:9)

您可以通过访问NSData属性从bytes获取字节。然后将其转换为指向您想要的任何类型的指针。显然,您需要确保知道NSData中的字节顺序和大小。

e.g。

#include <CFByteOrder.h>

// Bytes to uint32_t
NSData *data = <THE_DATA>;
void *bytes = [data bytes];
uint32_t *intBytes = (NSInteger*)bytes;
uint32_t swapped = CFSwapInt32BigToHost(*intBytes); ///< If the data in `data' is big endian

// uint32_t to bytes
uint32_t someInt = 1234;
uint32_t swappedInt = CFSwapInt32HostToBig(someInt); ///< If we want to store in big endian
NSData *data = [NSData dataWithBytes:&swappedInt length:sizeof(swappedInt)];

答案 1 :(得分:4)

我想你想要CFSwapInt32 *系列函数。

请参阅Apple's docs