Bir NSString
nesnem var ve onu bir std::string
.
Bunu Objective-C ++ 'da nasıl yaparım?
Yanıtlar:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String]);
Düzenleme: Birkaç yıl sonra, bu cevabı genişletmeme izin verin. Haklı belirttiği gibi, büyük olasılıkla kullanmak isteyeceksiniz cStringUsingEncoding:
ile NSASCIIStringEncoding
kullandığınız sonuna kadar gidiyoruz std::string
. UTF-8'i normal olarak kullanabilirsiniz std::strings
, ancak bunların baytlar üzerinde çalıştığını ve karakterlerde veya hatta grafiklerde çalışmadığını unutmayın. İyi bir "başlangıç" için, bu soruya ve yanıtına bir göz atın .
Ayrıca, ASCII olarak temsil edilemeyen bir dizeniz varsa, ancak yine de onu std::string
istiyorsanız ve orada ASCII olmayan karakterler istemiyorsanız , kayıplı kodlanmış ASCII ile dizenin dataUsingEncoding:allowLossyConversion:
bir NSData
temsilini elde etmek için kullanabilirsiniz . içerik ve sonra bunustd::string
-cStringUsingEncoding:
bunun yerine kullanmanız gerekir . :)
new
s hoş karşılanmaz ve a std::shared_ptr
veya std::unique_ptr
tercih edilmelidir.
Philjordan.eu'da belirtildiği gibi NSString de olabilir nil
. Böyle bir durumda alçı şu şekilde yapılmalıdır:
// NOT: eğer foo nil ise bu boş bir C ++ dizesi üretecektir
// UTF8String'den NULL göstericisinin başvurusunu kaldırmak yerine.
Bu sizi böyle bir dönüşüme götürür:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String], [foo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);