【问题标题】: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 中声明,这可能会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-24
        • 2013-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-18
        相关资源
        最近更新 更多