我想将NSData
实例中的8个字节转换为具有2个项目的uint32_t
数组。我做了以下事情,但这是不正确的。
NSLog(@"Challenge data %@",dataChallenge);
uint32_t *data = (uint32_t *)dataChallenge.bytes;
NSLog(@"data0: %08x, data1: %08x", data[0], data[1]);
结果如下:
Challenge data <3ce3e664 dafda14b>
data0: 64e6e33c, data1: 4ba1fdda
数据顺序不正确。
值应为:
Challenge data <3ce3e664 dafda14b>
data0: 3ce3e664, data1: dafda14b
最佳答案
uint32_t * data =(uint32_t *)dataChallenge.bytes;
例:
NSData *dataChallenge = [@"12345678" dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"dataChallenge: %@", dataChallenge);
uint32_t *data = (uint32_t *)dataChallenge.bytes;
NSLog(@"data0: %08x, data1: %08x", data[0], data[1]);
NSLog输出:
data挑战:
data0:34333231,data1:38373635
注意:字节是反向的,因为这是一台Lith-endian机器
使用memcpy:
NSData *dataChallenge = [@"12345678" dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"dataChallenge: %@", dataChallenge);
uint32_t data[2];
memcpy(data, (uint32_t *)dataChallenge.bytes, dataChallenge.length);
NSLog(@"data0: %08x, data1: %08x", data[0], data[1]);
NSLog输出:
data挑战:
data0:34333231,data1:38373635
交换字节顺序:
NSLog(@"data0: %08x, data1: %08x", CFSwapInt32BigToHost(data[0]), CFSwapInt32BigToHost(data[1]));
NSLog输出:
数据0:31323334,数据1:35363738
注意:有关字节交换的更多组合,请参见CFByteOrder.h。
关于ios - 将NSData转换为unsigned int 32数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22003755/