Respuestas:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String]);
Editar: Después de unos años, permítanme ampliar esta respuesta. Como se señaló con razón, lo más probable es que desee usar cStringUsingEncoding:
con NSASCIIStringEncoding
si va a terminar usando std::string
. Puede usar UTF-8 con normal std::strings
, pero tenga en cuenta que operan en bytes y no en caracteres o incluso grafemas. Para un buen "comienzo", consulte esta pregunta y su respuesta .
También tenga en cuenta que si tiene una cadena que no se puede representar como ASCII pero aún la quiere en un std::string
y no desea caracteres que no sean ASCII allí, puede usarla dataUsingEncoding:allowLossyConversion:
para obtener una NSData
representación de la cadena con ASCII codificado con pérdida contenido, y luego tírelo a tustd::string
-cStringUsingEncoding:
en su lugar. :)
new
s están bien vistas, y una std::shared_ptr
o std::unique_ptr
deben ser preferidos.
Como se señaló en philjordan.eu , también podría ser que NSString sea nil
. En tal caso, el yeso debe hacerse así:
// NOTA: si foo es nil, esto producirá una cadena C ++ vacía
// en lugar de eliminar la referencia al puntero NULL de UTF8String.
Esto lo llevaría a tal conversión:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String], [foo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);