У меня есть объект NSString
и вы хотите преобразовать его в std::string
.
Как это сделать в Objective-C ++?
У меня есть объект NSString
и вы хотите преобразовать его в std::string
.
Как это сделать в Objective-C ++?
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
Как предложил Ynau в комментарии, в общем случае было бы лучше сохранить все в стеке вместо кучи (используя new
создает строку в куче), следовательно (предполагая кодировку UTF8):
NSString *foo = @"Foo";
std::string bar([foo UTF8String]);
Как отмечено в philjordan.eu, также может быть, что NSString равен нулю. В таком случае бросок должен выполняться следующим образом:
//ПРИМЕЧАНИЕ: если foo is nil, это приведет к пустой строке С++
//вместо разыменования указателя NULL из UTF8String.
Это приведет вас к такому преобразованию:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String], [foo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);