将 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
.
中字节的副本
我正在尝试找出更改我拥有的 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
.