Как мне преобразовать NSString в std::string?

У меня есть NSString объект и хотите превратить его в std::string,

Как мне сделать это в Objective-C++?

3 ответа

Решение
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String]);

Изменить: через несколько лет позвольте мне расширить этот ответ. Как справедливо указано, вы, скорее всего, захотите использовать cStringUsingEncoding: с NSASCIIStringEncoding если вы собираетесь в конечном итоге использовать std::string, Вы можете использовать UTF-8 с обычным std::strings, но имейте в виду, что они действуют на байты, а не на символы или даже графемы. Для хорошего начала работы, проверьте этот вопрос и его ответ.

Также обратите внимание, что если у вас есть строка, которая не может быть представлена ​​в виде ASCII, но вы все еще хотите ее в std::string и вы не хотите, чтобы там были не-ASCII символы, вы можете использовать dataUsingEncoding:allowLossyConversion: чтобы получить NSData представление строки с содержимым в кодировке ASCII с потерями, а затем выбросить его на ваш std::string

Как предложил Ynau в комментарии, в общем случае было бы лучше хранить все в стеке, а не в куче (используя 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]);
Другие вопросы по тегам