2

我想构造一个内容为 3 NSInteger 类型的 NSData 对象,我使用以下代码:

- (void)test
{

    NSInteger i = 12, j = 2000, k = 2;

    NSMutableData *md = [NSMutableData dataWithCapacity:10];

    [md appendBytes:&i length:sizeof(i)];
    [md appendBytes:&j length:sizeof(j)];
    [md appendBytes:&k length:sizeof(k)];

    NSLog(@"data is %@",md);
}

但是当我记录它时,它告诉我:

data is <0c000000 d0070000 02000000>

我把这些翻译成十进制,这些数字是201326592、3490119680、33554432。所以我不知道为什么是这些数字,我该怎么办?谢谢。

4

2 回答 2

7

您使用的是 little-endian 架构,这意味着 LSB(最低有效字节)排在第一位。序列 0c 00 00 00 代表数字 00 00 00 0c,即 12。

于 2012-09-10T03:40:07.403 回答
3

最后我按照 Marcelo 的回答,发现这个 API 对我很有效:

- (void)test
{

    NSInteger i = 12, j = 2000, k = 2;

    NSInteger i2 =  CFSwapInt32HostToBig(i);
    NSInteger j2 = CFSwapInt32HostToBig(j);
    NSInteger k2 = CFSwapInt32HostToBig(k);


    NSMutableData *md = [NSMutableData dataWithCapacity:10];

    [md appendBytes:&i2 length:sizeof(i2)];
    [md appendBytes:&j2 length:sizeof(j2)];
    [md appendBytes:&k2 length:sizeof(k2)];


    NSLog(@"data is %@",md);

}

日志:

data is <0000000c 000007d0 00000002>
于 2012-09-10T05:22:33.590 回答