Tenho um NSString
objeto e desejo convertê-lo em um std::string
.
Como faço isso em Objective-C ++?
objective-c
objective-c++
gabor
fonte
fonte
Respostas:
Edit: Depois de alguns anos, deixe-me expandir esta resposta. Como corretamente apontado, você provavelmente desejará usar
cStringUsingEncoding:
comNSASCIIStringEncoding
se for acabar usandostd::string
. Você pode usar UTF-8 com normalstd::strings
, mas lembre-se de que eles operam em bytes e não em caracteres ou mesmo grafemas. Para um bom "começo", verifique esta pergunta e sua resposta .Observe também que, se você tem uma string que não pode ser representada como ASCII, mas ainda quer em um
std::string
e não quer caracteres não ASCII lá, você pode usardataUsingEncoding:allowLossyConversion:
para obter umaNSData
representação da string com ASCII codificado com perdas conteúdo e, em seguida, jogue-o em seustd::string
fonte
-cStringUsingEncoding:
lugar. :)new
são desaprovados e umstd::shared_ptr
oustd::unique_ptr
deve ser preferido.Como Ynau sugeriu no comentário, em um caso geral, seria melhor manter tudo na pilha em vez de no heap (usando
new
cria a string no heap), portanto (assumindo a codificação UTF8):fonte
Conforme observado em philjordan.eu , também pode ser que o NSString esteja
nil
. Nesse caso, o elenco deve ser feito assim:Isso levaria você a essa conversão:
fonte