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 打印带有奇怪符号的缓冲区,而不是字节值。

4

2 回答 2

3

NSLog 打印带有奇怪符号的缓冲区,而不是字节值。

因为这些是NSData 包含的实际字节,而不是它们的十六进制表示。如果您想要十六进制表示,则必须相应地格式化字节:

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]返回十六进制表示。那不是更容易吗?

更新:发现为什么[data description]不应该使用:https ://stackoverflow.com/a/9084784/58505

于 2013-03-26T21:23:16.547 回答