¿Cómo convierto un NSString
valor a NSData
?
ios
objective-c
nsstring
nsdata
Mella
fuente
fuente
NSString
usa UTF-16 internamente, por lo que puede haber una ligera ganancia de rendimiento porque no tiene que hacer una conversión UTF-16 <-> UTF-8. Personalmente, preferimos (como sugiere @ gnasher729) robustez sobre el rendimiento y usamos UTF-8 en todas partes.puedes tomar referencia desde este enlace
fuente
NSData *data = [@"helowrld" dataUsingEncoding:NSUTF8StringEncoding];
Hacer:
entonces siéntase libre de proceder
NSJSONSerialization:JSONObjectWithData
.Corrección a la respuesta con respecto al terminador NULL
Después de los comentarios, la documentación oficial y las verificaciones , esta respuesta se actualizó con respecto a la eliminación de un supuesto terminador NULL:
Según lo documentado por dataUsingEncoding ::
Según lo documentado por getCString: maxLength: encoding: y cStringUsingEncoding ::
fuente
dataUsingEncoding:
no devuelve datos terminados en nulo. SoloUTF8String
y otros métodos que devuelven una cadena C devuelven una cadena terminada en nulo.(note that the data returned by dataUsingEncoding:allowLossyConversion: is not a strict C-string since it does not have a NULL terminator)
. Debo haberme perdido esto antes. Sin embargo, me aseguraré de escribir cualquier cosa en el futuro.cStringUsingEncoding:
. Estaba mirando debajodataUsingEncoding:
.)En caso de que Swift Developer venga aquí,
para convertir de NSString / String a NSData
fuente
C objetivo:
Rápido:
fuente
En primer lugar, debe usar en
dataUsingEncoding:
lugar de pasarUTF8String
. Solo se usaUTF8String
cuando necesita unaC
cadena en esa codificación.Luego, para
UTF-16
, simplemente pasa enNSUnicodeStringEncoding
lugar deNSUTF8StringEncoding
en tudataUsingEncoding:
mensaje.fuente
Para Swift 3, en su mayoría se convertirá de
String
aData
.fuente
fuente
str
contiene puntos de código mayores que 127. Esto se debe a questr.length
proporciona la cantidad de caracteres Unicode, no la cantidad de bytes. Por ejemplo, sistr
es así@"にほんご"
,str.length
da 4 mientras que enstr.UTF8String
realidad contiene 12 bytes. Incluso si reemplazastr.length
porstrlen(str.UTF8String)
, seguirá siendo incorrecto para el caso dondestr
contiene el carácter NULL, como@"にほ\0んご"
.C objetivo:
NSString a NSData:
NSData a NSString:
Rápido:
Cadena de datos:
Datos a la cadena:
fuente
fuente
C objetivo
Rápido
fuente