将 NSData 字节顺序更改为小端

Changing NSData byte order to little endian

我正在尝试找出更改我拥有的 NSData 对象字节顺序的最佳方法。

这就是我创建它的方式

NSData *pillowData = [manufData subdataWithRange:NSMakeRange(5, 4)];

这是 pillowData 的输出

41543138

这就是我希望 pillowData 在转换后的样子。

38315441

基本上转换为小端。

NSData没有字节顺序的概念,它是一个简单的字节序列。如果您需要对这些字节施加特定顺序,则必须为此编写自己的代码。

也就是说,Core Foundation 有很多帮助方法,例如。 CFSwapInt32() 和许多其他的,都在 CFByteOrder.h 中声明,这可能会有帮助。

    NSData *manufData = [NSData dataWithBytes:"12345AT18" length:9];
    NSMutableData *pillowData = [[manufData subdataWithRange:NSMakeRange(5, 4)] mutableCopy];
    uint32_t *bytes = pillowData.mutableBytes;
    *bytes = CFSwapInt32(*bytes);
    NSLog(@"%@", pillowData);

输出:

2018-01-25 15:52:39.067805-0600 test[23520:1338453] <38315441>

请注意,这不会更改 manufData 的内容。它只更改 pillowData.

中字节的副本