Como converto um NSString
valor para NSData
?
ios
objective-c
nsstring
nsdata
usuario
fonte
fonte
NSString
usa o UTF-16 internamente, portanto pode haver um pequeno ganho de desempenho, porque ele não precisa fazer uma conversão UTF-16 <-> UTF-8. Pessoalmente, preferimos (como @ gnasher729 sugere) a robustez ao desempenho e usamos o UTF-8 em qualquer lugar.você pode consultar este link
fonte
NSData *data = [@"helowrld" dataUsingEncoding:NSUTF8StringEncoding];
Faz:
então fique à vontade para prosseguir
NSJSONSerialization:JSONObjectWithData
.Correção da resposta referente ao terminador NULL
Após os comentários, a documentação oficial e as verificações , esta resposta foi atualizada com relação à remoção de um suposto terminador NULL:
Conforme documentado por dataUsingEncoding ::
Conforme documentado por getCString: maxLength: encoding: e cStringUsingEncoding ::
fonte
dataUsingEncoding:
não retorna dados terminados em nulo. SomenteUTF8String
e outros métodos que retornam uma string C retornam uma string terminada em nulo.(note that the data returned by dataUsingEncoding:allowLossyConversion: is not a strict C-string since it does not have a NULL terminator)
. Eu devo ter perdido isso antes. Certificarei de escrever qualquer coisa no futuro, no entanto.cStringUsingEncoding:
eu estava olhando para baixo.dataUsingEncoding:
.)No caso do Swift Developer chegar aqui,
converter de NSString / String para NSData
fonte
Objetivo-C:
Rápido:
fonte
Primeiro, você deve usar em
dataUsingEncoding:
vez de passarUTF8String
. Você só usaUTF8String
quando precisa de umaC
sequência nessa codificação.Então,
UTF-16
basta passar emNSUnicodeStringEncoding
vez deNSUTF8StringEncoding
na suadataUsingEncoding:
mensagem.fonte
Para o Swift 3, você converterá principalmente de
String
paraData
.fonte
fonte
str
contém pontos de código maiores que 127. Isso ocorre porquestr.length
fornece o número de caracteres Unicode, não o número de bytes. Por exemplo, sestr
estiver@"にほんご"
,str.length
fornece 4 enquantostr.UTF8String
na verdade contém 12 bytes. Mesmo se você substituirstr.length
porstrlen(str.UTF8String)
, ainda estará errado no caso em questr
contenha o caractere NULL, como@"にほ\0んご"
.Objetivo-C:
NSString para NSData:
NSData para NSString:
Rápido:
String para dados:
Dados para String:
fonte
fonte
Objetivo-C
Rápido
fonte