web-dev-qa-db-ja.com

NSStringをstd :: stringに変換するにはどうすればよいですか?

NSStringオブジェクトがあり、std::stringに変換したい。

Objective-C++でこれを行うにはどうすればよいですか?

91
gabor
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String]);

編集:数年後、この答えを詳しく説明します。当然のことながら、cStringUsingEncoding:を使用することになった場合は、std::stringNSASCIIStringEncodingとともに使用することをお勧めします。通常のstd::stringsでUTF-8を使用できますが、これらは文字やグラフェンではなくバイトで動作することに注意してください。良い「はじめに」のために、これをチェックしてください 質問とその答え

また、ASCIIとして表現できない文字列があり、それでもstd::stringでそれが必要で、そこに非ASCII文字が必要ない場合は、 dataUsingEncoding:allowLossyConversion:を使用して、損失のあるエンコードされたASCIIコンテンツを含む)の文字列のNSData表現を取得し、std::stringでそれをスローできます。

126
JustSid

Ynauがコメントで示唆したように、一般的なケースでは、ヒープの代わりにすべてをスタックに保持する方がよい(newを使用してヒープに文字列を作成します)。

NSString *foo = @"Foo";
std::string bar([foo UTF8String]);
50
Marco83

philjordan.e で述べたように、NSStringがnilである可能性もあります。このような場合、キャストは次のように実行する必要があります。

//注:fooがnilの場合、空のC++文字列が生成されます

// UTF8StringからNULLポインターを逆参照する代わりに。

これにより、次のような変換が行われます。

NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String], [foo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
6
Bruno Bieri