通过字节计数解析NSData

时间:2012-12-21 13:27:20

标签: objective-c hex nsdata

我有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到这样的结构,我应该使用哪些类型的变量(Action)?

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

尝试以这种方式进行一些测试,但NSLog打印带有奇怪符号的aBuffer,而不是字节值。

2 个答案:

答案 0 :(得分:3)

  

NSLog使用奇怪的符号打印aBuffer,而不是字节值。

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

NSMutableString *hexRepr = [NSMutableString string];
for (int i = 0; i < 8; i++) {
    [hexRepr appendFormat:@"%02x", ((uint8_t *)[data bytes])[offset * 8 + i]];
}

答案 1 :(得分:0)

作为对@ H2CO3答案的跟进,

根据NSData docs[data description]返回十六进制表示。那不是更容易吗?

更新:找到不应使用[data description]的原因:https://stackoverflow.com/a/9084784/58505