Respostas:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String]);
Edit: Depois de alguns anos, deixe-me expandir esta resposta. Como corretamente apontado, você provavelmente desejará usar cStringUsingEncoding:
comNSASCIIStringEncoding
se for acabar usando std::string
. Você pode usar UTF-8 com normal std::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 usar dataUsingEncoding:allowLossyConversion:
para obter uma NSData
representação da string com ASCII codificado com perdas conteúdo e, em seguida, jogue-o em seustd::string
-cStringUsingEncoding:
lugar. :)
new
são desaprovados e um std::shared_ptr
ou std::unique_ptr
deve ser preferido.
Conforme observado em philjordan.eu , também pode ser que o NSString esteja nil
. Nesse caso, o elenco deve ser feito assim:
// NOTA: se foo for nulo, isso produzirá uma string C ++ vazia
// em vez de remover a referência do ponteiro NULL de UTF8String.
Isso levaria você a essa conversão:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String], [foo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);