我创建随机文件:
-(NSData*)generateRandomNSDataWithNumberOfRecords:(int)length {
NSMutableData* theData = [[NSMutableData alloc] init];
int numberOfElements;
for (int i=0; i<length; i++) {
numberOfElements = arc4random() % 15;
if (numberOfElements == 0)
numberOfElements = 1;
NSData *tempData = [NSData dataWithBytes: &numberOfElements length: sizeof(numberOfElements)];
[theData appendData:tempData];
for(int j = 0 ; j < numberOfElements; j++)
{
int randomBits = arc4random()%255; // 0 to 255
[theData appendData:[NSData dataWithBytes: &randomBits length: sizeof(randomBits)]];
}
}
return theData;
}
当进行hexdumping时,我可以看到:
hexdump -C Tape1
00000000 04 00 00 00 cd 00 00 00 14 00 00 00 65 00 00 00 |............e...|
00000010 16 00 00 00 0a 00 00 00 d2 00 00 00 c1 00 00 00 |................|
00000020 02 00 00 00 f6 00 00 00 e4 00 00 00 ce 00 00 00 |................|
第一个应该是4(通过调试器检出)。 但它似乎是以其他方式写成的。
是否有一个简单的解决方案告诉NSData“正确”存储数据?
答案 0 :(得分:2)
这是endian问题。
我只需要:randomBits = CFSwapInt32HostToBig(randomBits);