3 ответов:
NSString *foo = @"Foo"; std::string bar = std::string([foo UTF8String]);Edit: через несколько лет, позвольте мне расширить этот ответ. Как справедливо указано, вы, скорее всего, захотите использовать
cStringUsingEncoding:СNSASCIIStringEncodingЕсли вы собираетесь в конечном итоге с помощьюstd::string. Вы можете использовать UTF-8 при нормеstd::strings, но имейте в виду, что они работают на байтах, а не на символах или даже графемах. Для хорошего "начала работы", проверьте это вопрос и ответ на него.также обратите внимание, если у вас есть строка, которая не может быть представлена как ASCII но вы все равно хотите его в
std::stringи вы не хотите не-ASCII символов там, вы можете использоватьdataUsingEncoding:allowLossyConversion:для полученияNSDataпредставление строки с потерями кодированного содержимого ASCII, а затем бросить, что на вашstd::string
Как предложил Янау в комментарии, в общем случае было бы лучше сохранить все в стеке вместо кучи (используя
newсоздает строку в куче), следовательно (предполагая кодировку UTF8):NSString *foo = @"Foo"; std::string bar([foo UTF8String]);
Как отмечено на philjordan.eu также может быть, что NSString-это
nil. В таком случае бросок должен быть сделан следующим образом:/ / примечание: если foo равно nil, это приведет к пустой строке C++
/ / вместо разыменования нулевого указателя из UTF8String.
это приведет вас к такому переустройству:
NSString *foo = @"Foo"; std::string bar = std::string([foo UTF8String], [foo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
Comments