Jak mogę iterować przez [NSData bytes]
jeden po drugim i dołączyć je do NSMutableString
lub wydrukować je za pomocą NSLog()
?Powtórzenie przez bajty NSData
Odpowiedz
Zamiast dołączania bajty do zmiennego łańcucha, utworzyć ciąg przy użyciu danych:
// Be sure to use the right encoding:
NSString *result = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];
Jeśli naprawdę chcą pętli bajtów:
NSMutableString *result = [NSMutableString string];
const char *bytes = [myData bytes];
for (int i = 0; i < [myData length]; i++)
{
[result appendFormat:@"%02hhx", (unsigned char)bytes[i]];
}
Update! Od wersji iOS 7 istnieje nowy, preferowany sposób na iterowanie wszystkich bajtów w obiekcie NSData.
Ze względu na to NSData
mogą się składać z wielu rozłącznych kawałki tablicy bajtów pod maską, nazywając [NSData bytes]
może być czasem pamięci nieefektywne, ponieważ musi spłaszczyć wszystkie kawałki leżących w jednej tablicy bajtów do rozmówcy.
Aby tego uniknąć, lepiej jest wyliczyć bajty przy użyciu metody NSData, która zwróci zakresy istniejących fragmentów bazowych, do których można uzyskać bezpośredni dostęp bez potrzeby generowania jakichkolwiek nowych struktur tablic. Oczywiście, musisz uważać, aby nie grzebać niewłaściwie w dostarczonej tablicy w stylu 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. Powtórzenie przez indeksowaną właściwość w Delphi 2010
- 2. nauka Haskell: łącznikami zwracane przez powtórzenie
- 3. nieznany bajty są zwracane przez getBytes() metoda
- 4. Jak czytać wszystkie bajty razem przez Bluetooth?
- 5. Jak przekonwertować NSUUID na NSData
- 6. Konwertuj NSData na ciąg?
- 7. Konwersja NSData do NSString!
- 8. Powtórzenie właściwości JsonObject
- 9. Powtórzenie kontenera unique_ptr's
- 10. Android VideoView powtórzenie
- 11. NSURLSession, zadanie przesyłania - Uzyskaj rzeczywiste bajty przesłane
- 12. Powtórzenie zakresu dat w NodeJS
- 13. Używanie struktur (bajtów) z SWIFT - Struct do NSData i NSData do Struct
- 14. Powtórzenie każdego elementu siostrzanego
- 15. Powtórzenie zagnieżdżonego słownika
- 16. Powtórzenie właściwości nieprzeliczalnych
- 17. Powtórzenie zestawu pozycji mapy
- 18. powtórzenie iteracji pętli for
- 19. Powtórzenie impulsu Animacja
- 20. Powtórzenie obrazu tła HTML5
- 21. Przeczytaj pierwsze bajty pliku
- 22. json_encode serializuje bajty null
- 23. iOS SecKeyRef do NSData
- 24. Konwersja NSData na base64
- 25. Konwertowanie NSData na NSDictionary
- 26. QLPreviewController z NSData?
- 27. iPhone - int do NSData?
- 28. Umieścić PDF w NSData
- 29. NSData contentsOfUrl zwraca zero
- 30. Drukowanie NSData w Swift?
Czym powinna być linia doSomethingWithChar np. czy chcę dodać szesnastkową reprezentację bajtu do NSMutableString? – yannis
co, jeśli nsdata nie jest w rzeczywistości ciągiem znaków? co się stanie, jeśli zawiera bajt 0x00, wtedy nie będzie można dokonywać iteracji przez całe dane. –