Comment convertir une NSString
valeur en NSData
?
ios
objective-c
nsstring
nsdata
pseudo
la source
la source
NSString
utilise UTF-16 en interne, il peut donc y avoir un léger gain de performances car il n'a pas à faire de conversion UTF-16 <-> UTF-8. Personnellement, nous préférons (comme le suggère @ gnasher729) la robustesse aux performances et utilisons UTF-8 partout.vous pouvez prendre référence à partir de ce lien
la source
NSData *data = [@"helowrld" dataUsingEncoding:NSUTF8StringEncoding];
Faire:
alors n'hésitez pas à continuer
NSJSONSerialization:JSONObjectWithData
.Correction de la réponse concernant le terminateur NULL
Suite aux commentaires, à la documentation officielle et aux vérifications , cette réponse a été mise à jour concernant la suppression d'un prétendu terminateur NULL:
Comme documenté par dataUsingEncoding ::
Tel que documenté par getCString: maxLength: encoding: et cStringUsingEncoding ::
la source
dataUsingEncoding:
ne renvoie pas de données terminées par null. Seules lesUTF8String
autres méthodes qui renvoient une chaîne C renvoient une chaîne terminée par null.(note that the data returned by dataUsingEncoding:allowLossyConversion: is not a strict C-string since it does not have a NULL terminator)
. J'ai dû manquer ça plus tôt. Je serai sûr d'écrire quoi que ce soit à l'avenir, cependant.cStringUsingEncoding:
. Je regardais en dessousdataUsingEncoding:
.)Si Swift Developer vient ici,
pour convertir de NSString / String en NSData
la source
Objectif c:
Rapide:
la source
Tout d'abord, vous devez utiliser
dataUsingEncoding:
au lieu de passer parUTF8String
. Vous utilisez uniquementUTF8String
lorsque vous avez besoin d'uneC
chaîne dans cet encodage.Ensuite, pour
UTF-16
, passez simplementNSUnicodeStringEncoding
au lieu deNSUTF8StringEncoding
dans votredataUsingEncoding:
message.la source
Pour Swift 3, vous effectuerez principalement la conversion de
String
àData
.la source
la source
str
contient des points de code supérieurs à 127. Cela est dû au fait qu'ilstr.length
donne le nombre de caractères Unicode, pas le nombre d'octets. Par exemple, sistr
est@"にほんご"
,str.length
donne 4 alorsstr.UTF8String
qu'il contient en fait 12 octets. Même si vous remplacezstr.length
parstrlen(str.UTF8String)
, il sera toujours incorrect pour le cas oùstr
contient le caractère NULL, tel que@"にほ\0んご"
.Objectif c:
NSString à NSData:
NSData à NSString:
Rapide:
Chaîne en données:
Données à chaîne:
la source
la source
Objectif c
Rapide
la source