将NSData字节顺序更改为little endian

时间:2018-01-25 21:44:37

标签: ios objective-c nsdata endianness

我试图找出改变我的NSData对象的字节顺序的最佳方法。

这是我创建它的方式

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

这是pillowData的输出

41543138

这就是我想要在转换后使用pillowData。

38315441

基本上转换为小端。

2 个答案:

答案 0 :(得分:4)

NSData没有字节序的概念,它是一个简单的字节序列。如果您需要对这些字节强加一定的顺序,那么您必须为此推出自己的代码。

那就是说,Core Foundation有一堆辅助方法,例如。 CFSwapInt32()以及许多其他人,都在CFByteOrder.h中宣布,这可能会有所帮助。

答案 1 :(得分:3)

    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中的字节副本。

相关问题