1

私は NSData を持っており、それをバイト単位で解析したいと考えています。ここに例があります。 data is <8283010c ec4f483f 0d00000c 0c0f2840 >

私が作成した各オブジェクトに 8 バイトを渡し(8283010c ec4f483f for first object,0d00000c 0c0f2840 for the second)、各バイトをこのように解析したいと思います。

  //  First byte > Action = 82
  //  2nd and 3rd byte > Status = 83 01
  //  4,5,6,7 byte > Time = 0c ec 4f48
  //  8 byte > Number = 3f

NSData をそのような構造に解析するにはどうすればよいですか? 変数 (アクション) にはどの型を使用すればよいですか?

unsigned char aBuffer[8];
[data getBytes:aBuffer length:8];

このような方法で少しテストを実行しようとしましたが、NSLog は、バイト値ではなく、奇妙な記号で aBuffer を出力します。

4

2 に答える 2

3

NSLogは、バイト値ではなく、奇妙な記号でaBufferを出力します。

これらはNSDataに含まれる実際のバイトであり、16進表現ではないためです。16進表現が必要な場合は、それに応じてバイトをフォーマットする必要があります。

NSMutableString *hexRepr = [NSMutableString string];
for (int i = 0; i < 8; i++) {
    [hexRepr appendFormat:@"%02x", ((uint8_t *)[data bytes])[offset * 8 + i]];
}
于 2012-12-21T13:36:01.347 に答える
0

@H2CO3の回答のフォローアップとして、

NSData docsによると、 [data description]16 進数表現を返します。それは簡単ではないでしょうか?

[data description]更新:使用しない理由が見つかりました: https://stackoverflow.com/a/9084784/58505

于 2013-03-26T21:23:16.547 に答える