Saya memiliki sebuah NSString
objek 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 NSASCIIStringEncoding
jika 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::string
dan Anda tidak ingin karakter non-ASCII di sana, Anda dapat menggunakan dataUsingEncoding:allowLossyConversion:
untuk mendapatkan NSData
representasi dari string dengan ASCII yang dienkode dengan lossy konten, dan kemudian melemparkannya ke Andastd::string
-cStringUsingEncoding:
sebagai gantinya. :)
new
s tidak disukai, dan a std::shared_ptr
atau std::unique_ptr
harus 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]);