Jak przekonwertować NSString
wartość NSData
?
ios
objective-c
nsstring
nsdata
Nacięcie
źródło
źródło
NSString
używa UTF-16 wewnętrznie, więc może wystąpić niewielki wzrost wydajności, ponieważ nie musi on wykonywać konwersji UTF-16 <-> UTF-8. Osobiście wolimy (jak sugeruje @ gnasher729) solidność od wydajności i używamy UTF-8 wszędzie.możesz skorzystać z tego linku
źródło
NSData *data = [@"helowrld" dataUsingEncoding:NSUTF8StringEncoding];
Zrobić:
następnie możesz kontynuować
NSJSONSerialization:JSONObjectWithData
.Korekta odpowiedzi dotyczącej terminatora NULL
Po komentarzach, oficjalnej dokumentacji i weryfikacjach odpowiedź została zaktualizowana w odniesieniu do usunięcia domniemanego terminatora NULL:
Zgodnie z dokumentacją dataUsingEncoding ::
Zgodnie z dokumentacją getCString: maxLength: encoding: i cStringUsingEncoding ::
źródło
dataUsingEncoding:
nie zwraca danych zakończonych zerem. TylkoUTF8String
inne metody zwracające ciąg C zwracają ciąg zakończony znakiem null.(note that the data returned by dataUsingEncoding:allowLossyConversion: is not a strict C-string since it does not have a NULL terminator)
. Musiałem wcześniej to przegapić. Ale na pewno coś napiszę w przyszłości.cStringUsingEncoding:
.dataUsingEncoding:
W przypadku przyjazdu Swift Developer,
przekonwertować z NSString / String na NSData
źródło
Cel C:
Szybki:
źródło
Po pierwsze, powinieneś użyć
dataUsingEncoding:
zamiast przejśćUTF8String
. Używasz tylkoUTF8String
wtedy, gdy potrzebujeszC
łańcucha w tym kodowaniu.Następnie, po
UTF-16
prostu podajNSUnicodeStringEncoding
zamiastNSUTF8StringEncoding
wdataUsingEncoding:
wiadomości.źródło
W przypadku Swift 3 przeważnie konwertujesz z
String
naData
.źródło
źródło
str
zawiera punkty kodu większe niż 127. Jest tak, ponieważstr.length
podaje liczbę znaków Unicode, a nie liczbę bajtów. Na przykład, jeślistr
jest@"にほんご"
,str.length
daje 4, podczas gdystr.UTF8String
faktycznie zawiera 12 bajtów. Nawet jeśli zastąpićstr.length
przezstrlen(str.UTF8String)
, to nadal będzie źle dla przypadku, gdystr
zawiera znak NULL, takich jak@"にほ\0んご"
.Cel C:
NSString do NSData:
NSData do NSString:
Szybki:
Ciąg do danych:
Dane do ciągu:
źródło
źródło
Cel C
Szybki
źródło