Làm cách nào để tôi có thể lặp qua [NSData bytes]
từng cái một và nối chúng vào một NSMutableString
hoặc in chúng bằng cách sử dụng NSLog()
?Lặp lại qua các byte NSData
Trả lời
Thay vì phụ byte thành một chuỗi có thể thay đổi, tạo ra một chuỗi bằng cách sử dụng dữ liệu:
// Be sure to use the right encoding:
NSString *result = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];
Nếu bạn thực sự muốn lặp qua các byte:
NSMutableString *result = [NSMutableString string];
const char *bytes = [myData bytes];
for (int i = 0; i < [myData length]; i++)
{
[result appendFormat:@"%02hhx", (unsigned char)bytes[i]];
}
cập nhật! Kể từ iOS 7, có một cách mới, được ưu tiên để lặp qua tất cả các byte trong một đối tượng NSData.
Bởi vì NSData
có thể bao gồm nhiều mảng mảng tách rời dưới mui xe, gọi số [NSData bytes]
đôi khi có thể không hiệu quả bộ nhớ, vì nó cần làm phẳng tất cả các khối cơ bản thành một mảng byte cho người gọi. Để tránh hành vi này, tốt hơn nên liệt kê các byte bằng cách sử dụng phương thức NSData enumerateByteRangesUsingBlock:
, nó sẽ trả về phạm vi của các khối cơ bản hiện có mà bạn có thể truy cập trực tiếp mà không cần tạo bất kỳ cấu trúc mảng mới nào. Tất nhiên, bạn sẽ cần phải cẩn thận không để poking xung quanh không thích hợp trong mảng C-style được cung cấp.
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. Byte Array vào NSData
- 2. Looping thông qua các mục lặp lại
- 3. Lặp lại qua mảng - java
- 4. Sao chép một phần của mảng byte NSData sang một loại NSData khác
- 5. Lặp qua các vectơ
- 6. lặp lại thông qua các đối tượng trong JsonCpp
- 7. Lặp lại thông qua các đối tượng JavaScript lồng nhau
- 8. lặp lại thông qua các thành viên Struct
- 9. Lặp lại qua các hàng từ truy vấn Sqlite
- 10. Lặp lại qua các thư mục con đăng ký
- 11. Lặp lại qua Arraylist với các lớp mở rộng
- 12. C# Lặp lại thông qua các thuộc tính Lớp
- 13. Perl: Lặp lại thông qua các tệp INI
- 14. lặp lại thông qua các lĩnh vực mô hình - Django
- 15. lặp lại qua hai danh sách trong Django các mẫu
- 16. Lặp lại thông qua các trang web bằng Python Scrapy
- 17. Lặp lại các bước trên mỗi trang thông qua htmldoc
- 18. Python Lặp lại thông qua các ký tự
- 19. chuyển đổi NSData Chiều dài từ byte để megs
- 20. Gửi và nhận NSData qua GameKit
- 21. Lặp đi lặp lại qua cây để tìm kích thước
- 22. Lặp lại qua 2 Danh sách
- 23. Lặp lại qua chuỗi char bằng char
- 24. Lặp lại qua mảng 2 chiều C#
- 25. Lặp lại qua hàng đợi std
- 26. Lặp lại qua mảng chuỗi trong Java
- 27. Lặp qua TinyXML qua các phần tử
- 28. Java: Đối với mỗi vòng lặp, các đối tượng lặp lại qua mở rộng
- 29. Lặp lại qua một số lượng chưa xác định các vòng lặp lồng nhau trong python
- 30. Bắt buộc các RNG của openssl trả về một chuỗi byte lặp lại
Dòng doSomethingWithChar nên như thế nào. Ví dụ: nếu tôi muốn thêm biểu diễn thập lục phân của byte vào NSMutableString? – yannis
nếu nsdata không thực sự là một chuỗi thì sao? nếu nó chứa 0x00 byte thì bạn sẽ không thể lặp qua toàn bộ dữ liệu. –