У меня есть объект NSString и вы хотите преобразовать его в std::string.
Как это сделать в Objective-C ++?
Ответ 1
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String]);
Изменить: через несколько лет позвольте мне расширить этот ответ. Как было справедливо указано, вы, скорее всего, захотите использовать cStringUsingEncoding: с NSASCIIStringEncoding, если вы собираетесь использовать std::string. Вы можете использовать UTF-8 с обычным std::strings, но имейте в виду, что они работают с байтами, а не с символами или даже с графемами. Для хорошего "начала работы" ознакомьтесь с этим вопросом и его ответом.
Также обратите внимание: если у вас есть строка, которая не может быть представлена как ASCII, но вы все еще хотите ее в std::string, и вам не нужны символы, отличные от ASCII, вы можете использовать dataUsingEncoding:allowLossyConversion: для получения a NSData представление строки с контентом ASCII с кодировкой с потерями, а затем выбросить ее на ваш std::string
Ответ 2
Как предложил Ynau в комментарии, в общем случае было бы лучше сохранить все в стеке вместо кучи (используя new создает строку в куче), следовательно (предполагая кодировку UTF8):