【问题标题】:Changing NSData byte order to little endian将 NSData 字节顺序更改为小端
【发布时间】:2018-01-25 21:44:36
【问题描述】:
我正在尝试找出更改我拥有的 NSData 对象的字节顺序的最佳方法。
这就是我创建它的方式
NSData *pillowData = [manufData subdataWithRange:NSMakeRange(5, 4)];
这是枕头数据的输出
41543138
这就是我希望转换后的pillowData。
38315441
基本上转换为小端。
【问题讨论】:
标签:
ios
objective-c
nsdata
endianness
【解决方案1】:
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 中的字节副本。
【解决方案2】:
NSData 没有字节序的概念,它是一个简单的字节序列。如果您需要强制这些字节的特定顺序,则必须为此滚动您自己的代码。
也就是说,Core Foundation 有很多帮助方法,例如。 CFSwapInt32() 和许多其他人,都在 CFByteOrder.h 中声明,这可能会有所帮助。