Objective-C中的位转换工具

Bri*_*ian 3 iphone bit-manipulation objective-c endianness ios

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

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

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

mat*_*way 9

您可以NSData通过访问该bytes属性来获取字节数.然后将其转换为指向您想要的任何类型的指针.显然,你需要确保你知道你的内容的结尾和大小NSData.

例如

#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)];
Run Code Online (Sandbox Code Playgroud)