如何将NSString转换为std :: string?

时间:2011-11-03 20:50:04

标签: objective-c objective-c++

我有NSString个对象,想要将其转换为std::string

如何在Objective-C ++中执行此操作?

3 个答案:

答案 0 :(得分:123)

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

编辑:几年后,让我扩展这个答案。正确地指出,如果您最终使用cStringUsingEncoding:,您很可能希望NSASCIIStringEncodingstd::string一起使用。您可以将UTF-8与普通std::strings一起使用,但请记住,这些操作是按字节操作而不是字符甚至是字形。要获得良好的“入门”,请查看此question and its answer

另请注意,如果您的字符串不能表示为ASCII,但您仍然希望它在std::string中并且您不希望其中包含非ASCII字符,则可以使用{{1使用有损编码的ASCII内容获取字符串的dataUsingEncoding:allowLossyConversion:表示,然后将其放在NSData

答案 1 :(得分:50)

正如Ynau在评论中所建议的那样,在一般情况下,最好将所有内容保留在堆栈而不是堆上(使用new在堆上创建字符串),因此(假设UTF8编码):< / p>

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

答案 2 :(得分:6)

philjordan.eu所述,NSString也可能是nil。在这种情况下,演员表应该这样做:

  

//注意:如果foo为nil,则会产生一个空的C ++字符串

     

//而不是从UTF8String中取消引用NULL指针。

这会引导您进行这样的转换:

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