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 NSASCIIStringEncoding
si 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::string
et que vous ne voulez pas de caractères non-ASCII, vous pouvez utiliser dataUsingEncoding:allowLossyConversion:
pour obtenir une NSData
représentation de la chaîne avec ASCII encodé avec perte contenu, puis lancez-le à votrestd::string
-cStringUsingEncoding:
place. :)
new
sont mal vus, et un std::shared_ptr
ou std::unique_ptr
devrait ê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]);