Bir NSStringnesnem 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 NSASCIIStringEncodingkullandığı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::stringistiyorsanız ve orada ASCII olmayan karakterler istemiyorsanız , kayıplı kodlanmış ASCII ile dizenin dataUsingEncoding:allowLossyConversion:bir NSDatatemsilini elde etmek için kullanabilirsiniz . içerik ve sonra bunustd::string
-cStringUsingEncoding:bunun yerine kullanmanız gerekir . :)
news hoş karşılanmaz ve a std::shared_ptrveya std::unique_ptrtercih 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]);