我有NSString
个对象,想要将其转换为std::string
。
如何在Objective-C ++中执行此操作?
答案 0 :(得分:123)
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String]);
编辑:几年后,让我扩展这个答案。正确地指出,如果您最终使用cStringUsingEncoding:
,您很可能希望NSASCIIStringEncoding
与std::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]);