NSString
オブジェクトがあり、std::string
に変換したい。
Objective-C++でこれを行うにはどうすればよいですか?
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String]);
編集:数年後、この答えを詳しく説明します。当然のことながら、cStringUsingEncoding:
を使用することになった場合は、std::string
をNSASCIIStringEncoding
とともに使用することをお勧めします。通常のstd::strings
でUTF-8を使用できますが、これらは文字やグラフェンではなくバイトで動作することに注意してください。良い「はじめに」のために、これをチェックしてください 質問とその答え 。
また、ASCIIとして表現できない文字列があり、それでもstd::string
でそれが必要で、そこに非ASCII文字が必要ない場合は、 dataUsingEncoding:allowLossyConversion:
を使用して、損失のあるエンコードされたASCIIコンテンツを含む)の文字列のNSData
表現を取得し、std::string
でそれをスローできます。
Ynauがコメントで示唆したように、一般的なケースでは、ヒープの代わりにすべてをスタックに保持する方がよい(new
を使用してヒープに文字列を作成します)。
NSString *foo = @"Foo";
std::string bar([foo UTF8String]);
philjordan.e で述べたように、NSStringがnil
である可能性もあります。このような場合、キャストは次のように実行する必要があります。
//注:fooがnilの場合、空のC++文字列が生成されます
// UTF8StringからNULLポインターを逆参照する代わりに。
これにより、次のような変換が行われます。
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String], [foo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);