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