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>

これらを 10 進数に変換すると、これらの数値は 201326592、3490119680、33554432 になります。なぜこれらの数値なのかわかりません。どうすればよいですか? ありがとう。

4

2 に答える 2

7

リトルエンディアン アーキテクチャを使用しているため、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 に答える