Réponses:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String]);
Edit: Après quelques années, permettez-moi de développer cette réponse. Comme indiqué à juste titre, vous voudrez probablement utiliser cStringUsingEncoding:avec NSASCIIStringEncodingsi vous allez finir par utiliser std::string. Vous pouvez utiliser UTF-8 avec normal std::strings, mais gardez à l'esprit que ceux-ci fonctionnent sur des octets et non sur des caractères ou même des graphèmes. Pour un bon "démarrage", consultez cette question et sa réponse .
Notez également que si vous avez une chaîne qui ne peut pas être représentée en ASCII mais que vous la voulez toujours dans un std::stringet que vous ne voulez pas de caractères non-ASCII, vous pouvez utiliser dataUsingEncoding:allowLossyConversion:pour obtenir une NSDatareprésentation de la chaîne avec ASCII encodé avec perte contenu, puis lancez-le à votrestd::string
-cStringUsingEncoding:place. :)
newsont mal vus, et un std::shared_ptrou std::unique_ptrdevrait être préféré.
Comme indiqué sur philjordan.eu, il se peut également que la NSString soit nil. Dans un tel cas, le casting doit être fait comme ceci:
// NOTE: si foo est nul, cela produira une chaîne C ++ vide
// au lieu de déréférencer le pointeur NULL de UTF8String.
Cela vous conduirait à une telle conversion:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String], [foo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);