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



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



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

412   3  

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

    Ничего не найдено.