Відповіді:
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
s насуплюються, і a std::shared_ptr
або std::unique_ptr
слід віддати перевагу.
Як зазначено на philjordan.eu, також може бути, що NSString є nil
. У такому випадку кастинг слід робити так:
// ПРИМІТКА: якщо foo дорівнює нулю, це дасть порожній рядок C ++
// замість відмінювання посилання на покажчик NULL від UTF8String.
Це призведе до такого перетворення:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String], [foo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);