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 NSASCIIStringEncodingsi 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::stringy no desea caracteres que no sean ASCII allí, puede usarla dataUsingEncoding:allowLossyConversion:para obtener una NSDatarepresentación de la cadena con ASCII codificado con pérdida contenido, y luego tírelo a tustd::string
-cStringUsingEncoding:en su lugar. :)
news están bien vistas, y una std::shared_ptro std::unique_ptrdeben 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]);