回答:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String]);
編集:数年後、この答えについて詳しく説明しましょう。正しく指摘されているように、最終的にを使用cStringUsingEncoding:
するNSASCIIStringEncoding
場合は、を使用することをお勧めしますstd::string
。UTF-8を通常std::strings
ので使用できますが、UTF-8は文字や書記素ではなくバイトで動作することに注意してください。「はじめに」については、この質問とその回答を確認してください。
また、ASCIIとして表現できない文字列があり、それをそのstd::string
中に含めたいが、そこに非ASCII文字を含めたくない場合は、損失のあるエンコードされたASCIIを含む文字列の表現dataUsingEncoding:allowLossyConversion:
を取得するために使用できます。NSData
コンテンツ、そしてあなたにそれを投げますstd::string
-cStringUsingEncoding:
代わりに使用する必要があります。:)
new
のは眉をひそめ、とされているstd::shared_ptr
か、std::unique_ptr
優先されなければなりません。
philjordan.euで述べたように、NSStringがである可能性もありますnil
。このような場合、キャストは次のように行う必要があります。
//注:fooがnilの場合、空のC ++文字列が生成されます
// UTF8StringからNULLポインタを逆参照する代わりに。
これはあなたをそのような変換に導くでしょう:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String], [foo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);