¿Cómo convierto un NSStringvalor a NSData?
ios
objective-c
nsstring
nsdata
Mella
fuente
fuente

NSStringusa 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. SoloUTF8Stringy 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 usaUTF8Stringcuando necesita unaCcadena en esa codificación.Luego, para
UTF-16, simplemente pasa enNSUnicodeStringEncodinglugar deNSUTF8StringEncodingen tudataUsingEncoding:mensaje.fuente
Para Swift 3, en su mayoría se convertirá de
StringaData.fuente
fuente
strcontiene puntos de código mayores que 127. Esto se debe a questr.lengthproporciona la cantidad de caracteres Unicode, no la cantidad de bytes. Por ejemplo, sistres así@"にほんご",str.lengthda 4 mientras que enstr.UTF8Stringrealidad contiene 12 bytes. Incluso si reemplazastr.lengthporstrlen(str.UTF8String), seguirá siendo incorrecto para el caso dondestrcontiene 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