Saya memiliki sebuah NSStringobjek dan ingin mengubahnya menjadi file std::string.
Bagaimana cara melakukan ini di Objective-C ++?
Jawaban:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String]);
Sunting: Setelah beberapa tahun, izinkan saya memperluas jawaban ini. Seperti yang ditunjukkan dengan benar, Anda kemungkinan besar ingin menggunakan cStringUsingEncoding:dengan NSASCIIStringEncodingjika Anda akhirnya akan menggunakan std::string. Anda dapat menggunakan UTF-8 dengan normal std::strings, tetapi perlu diingat bahwa itu beroperasi pada byte dan bukan pada karakter atau bahkan grafem. Untuk "memulai" yang baik, lihat pertanyaan ini dan jawabannya .
Perhatikan juga, jika Anda memiliki string yang tidak dapat direpresentasikan sebagai ASCII tetapi Anda masih menginginkannya di dalam std::stringdan Anda tidak ingin karakter non-ASCII di sana, Anda dapat menggunakan dataUsingEncoding:allowLossyConversion:untuk mendapatkan NSDatarepresentasi dari string dengan ASCII yang dienkode dengan lossy konten, dan kemudian melemparkannya ke Andastd::string
-cStringUsingEncoding:sebagai gantinya. :)
news tidak disukai, dan a std::shared_ptratau std::unique_ptrharus lebih disukai.
Seperti dicatat di philjordan.eu , bisa juga NSString adalah nil. Dalam kasus seperti itu, pemeran harus dilakukan seperti ini:
// CATATAN: jika foo nil ini akan menghasilkan string C ++ kosong
// alih-alih mendereferensi penunjuk NULL dari UTF8String.
Ini akan membawa Anda pada pertobatan seperti itu:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String], [foo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);