Risposte:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String]);
Modifica: dopo alcuni anni, lasciatemi espandere questa risposta. Come giustamente sottolineato, molto probabilmente vorrai usare cStringUsingEncoding:
con NSASCIIStringEncoding
se finirai per usare std::string
. Puoi usare UTF-8 normalmente std::strings
, ma tieni presente che questi operano sui byte e non sui caratteri o addirittura sui grafemi. Per un buon "inizio", controlla questa domanda e la sua risposta .
Nota inoltre, se hai una stringa che non può essere rappresentata come ASCII ma la vuoi comunque in un std::string
e non vuoi caratteri non ASCII lì, puoi usarla dataUsingEncoding:allowLossyConversion:
per ottenere una NSData
rappresentazione della stringa con ASCII codificato con perdita contenuto e poi lancialo al tuostd::string
-cStringUsingEncoding:
invece usarla . :)
new
sono disapprovati e un std::shared_ptr
o std::unique_ptr
dovrebbe essere preferito.
Come notato su philjordan.eu , potrebbe anche essere che NSString lo sia nil
. In tal caso il cast dovrebbe essere fatto in questo modo:
// NOTA: se foo è nullo, produrrà una stringa C ++ vuota
// invece di dereferenziare il puntatore NULL da UTF8String.
Questo ti porterebbe a una tale conversione:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String], [foo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);