Wie konvertiere ich einen NSString
Wert in NSData
?
ios
objective-c
nsstring
nsdata
Nick
quelle
quelle
NSString
intern UTF-16, sodass möglicherweise ein geringfügiger Leistungsgewinn erzielt wird, da keine UTF-16 <-> UTF-8-Konvertierung durchgeführt werden muss. Persönlich bevorzugen wir (wie @ gnasher729 vorschlägt) Robustheit gegenüber Leistung und verwenden UTF-8 überall.Sie können auf diesen Link verweisen
quelle
NSData *data = [@"helowrld" dataUsingEncoding:NSUTF8StringEncoding];
Tun:
Dann können Sie fortfahren
NSJSONSerialization:JSONObjectWithData
.Korrektur der Antwort bezüglich des NULL-Terminators
Nach den Kommentaren, offiziellen Unterlagen und Überprüfungen wurde diese Antwort hinsichtlich der Entfernung eines mutmaßlichen NULL-Terminators aktualisiert:
Wie durch dokumentiert dataUsingEncoding: :
Wie durch dokumentiert getCString: maxLength: Codierung: und cStringUsingEncoding: :
quelle
dataUsingEncoding:
gibt keine nullterminierten Daten zurück. NurUTF8String
und andere Methoden, die eine C-Zeichenfolge zurückgeben, geben eine nullterminierte Zeichenfolge zurück.(note that the data returned by dataUsingEncoding:allowLossyConversion: is not a strict C-string since it does not have a NULL terminator)
. Ich muss das früher verpasst haben. Ich werde aber in Zukunft sicher alles aufschreiben.cStringUsingEncoding:
. Ich habe unter gesuchtdataUsingEncoding:
.)Falls Swift Developer hierher kommt,
von NSString / String nach NSData konvertieren
quelle
Ziel c:
Schnell:
quelle
Zunächst sollten Sie verwenden,
dataUsingEncoding:
anstatt durchzugehenUTF8String
. Sie werden nur verwendet,UTF8String
wenn Sie eineC
Zeichenfolge in dieser Codierung benötigen .Dann übergeben Sie
UTF-16
einfachNSUnicodeStringEncoding
stattNSUTF8StringEncoding
in IhrerdataUsingEncoding:
Nachricht.quelle
Bei Swift 3 konvertieren Sie hauptsächlich von
String
nachData
.quelle
quelle
str
Codepunkte größer als 127 enthalten sind. Dies liegt daran, dassstr.length
die Anzahl der Unicode-Zeichen und nicht die Anzahl der Bytes angegeben wird. Wenn dies der Fallstr
ist@"にほんご"
,str.length
ergibt dies 4, während esstr.UTF8String
tatsächlich 12 Bytes enthält. Auch wenn Sie ersetzenstr.length
durchstrlen(str.UTF8String)
, wird es noch für den Fall falsch sein , wennstr
das NULL - Zeichen enthält, wie zum Beispiel@"にほ\0んご"
.Ziel c:
NSString zu NSData:
NSData to NSString:
Schnell:
Zeichenfolge zu Daten:
Daten zu String:
quelle
quelle
Ziel c
Schnell
quelle