如何逐個遍歷[NSData bytes]
並將它們追加到NSMutableString
或使用NSLog()
打印?通過NSData字節進行迭代
7
A
回答
28
而不是附加的字節到一個可變的字符串,使用數據創建一個字符串:
// Be sure to use the right encoding:
NSString *result = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];
如果你真的通過字節要循環:
NSMutableString *result = [NSMutableString string];
const char *bytes = [myData bytes];
for (int i = 0; i < [myData length]; i++)
{
[result appendFormat:@"%02hhx", (unsigned char)bytes[i]];
}
11
更新!從iOS 7開始,有一種新的首選方法可以遍歷NSData對象中的所有字節。
因爲一個NSData
現在可以在引擎蓋下由多個不相交的字節數組塊,主叫[NSData bytes]
有時可以是存儲器低效的,因爲它需要所有的潛在塊壓扁成一個單一的字節數組的呼叫者。
爲避免此行爲,最好使用NSData的enumerateByteRangesUsingBlock:
方法枚舉字節,該方法將返回現有底層塊的範圍,您可以直接訪問它們的範圍,而無需生成任何新的數組結構。當然,你需要小心,不要在提供的C型陣列中不恰當地四處亂撥。
NSMutableString* resultAsHexBytes = [NSMutableString string];
[data enumerateByteRangesUsingBlock:^(const void *bytes,
NSRange byteRange,
BOOL *stop) {
//To print raw byte values as hex
for (NSUInteger i = 0; i < byteRange.length; ++i) {
[resultAsHexBytes appendFormat:@"%02x", ((uint8_t*)bytes)[i]];
}
}];
相關問題
- 1. 字節通過NSData的
- 2. 通過xmltextreader進行迭代
- 3. 通過stdClass進行迭代
- 4. 迭代通過NSData和抓塊
- 5. 通過2d向量行進行迭代
- 6. 通過QTreeWidget節點迭代
- 7. 斯卡拉:通過一個XML節點進行迭代
- 8. 通過XML進行迭代返回相同節點Over&Over
- 9. 通過廚師中的節點進行迭代
- 10. 通過嵌套列表進行迭代
- 11. 通過詞典詞典進行迭代
- 12. 通過多個div ID進行迭代
- 13. 如何通過kmem_caches進行迭代?
- 14. 通過Outlook預約進行迭代
- 15. 通過2D切片進行迭代
- 16. 通過AJAX響應進行迭代
- 17. 通過USB驅動器進行迭代
- 18. 通過多個列表進行迭代
- 19. 通過Ember對象進行迭代
- 20. 通過雙向鏈表進行迭代?
- 21. 通過列表進行迭代
- 22. 通過臨時表進行迭代
- 23. 通過散列圖進行迭代
- 24. 通過選擇選項進行迭代
- 25. 通過嵌套列表進行迭代
- 26. 如何通過Python中的已排序迭代進行迭代
- 27. 如何通過密鑰對中的字典進行迭代?
- 28. 通過具有特定屬性的字段進行迭代
- 29. 通過mongo的python字典進行遞歸迭代
- 30. 通過數字範圍進行迭代以添加爲鍵
doSomethingWithChar行應該是什麼,例如如果我想將字節的十六進制表示添加到NSMutableString? – yannis
如果nsdata實際上不是字符串呢?如果它包含0x00字節,那麼你將無法遍歷整個數據。 –