2012-12-21 32 views
1

我有NSData,我想按字節解析它。這是一個例子。 data is <8283010c ec4f483f 0d00000c 0c0f2840 >按字節計數解析NSData

我想將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奇怪的符號,而不是字節值。

+0

好了,你是什麼意思 「解析」 是什麼意思?在這種情況下,這並不合理。爲什麼不從「[data bytes] + offset * 8」中複製8個字節呢? – 2012-12-21 13:30:51

+0

數據使用什麼編碼?它可能會返回4個unichar字符而不是8個ASCII字符。您還應該告訴我們結構的定義,您提供的結構不明確。 –

+0

沒有數據編碼。這是原始數據。如果我能以某種方式將這些數據轉換爲NSString,那將會很棒。你可以寫一個關於如何做到這一點的簡單例子,或者指出我在哪裏可以學到這一點。因爲目前這是一片黑暗的森林,沒有光。 – Datenshi

回答

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]]; 
}