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

我有一个NSString对象,并希望将其转换为一个std::string

我如何在Objective-C ++中做到这一点?

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

编辑:几年后,让我扩大这个答案。 正如我们正确地指出的那样,如果你打算使用std::string ,你很可能会使用cStringUsingEncoding:NSASCIIStringEncoding 。 你可以用普通的std::strings来使用UTF-8,但是请记住,这些操作是在字节上进行的,而不是对字符甚至字符进行操作。 对于一个好的“入门”,看看这个问题及其答案 。

另外请注意,如果你有一个string不能被表示为ASCII,但你仍然希望它在一个std::string ,你不想在那里有非ASCII字符,你可以使用dataUsingEncoding:allowLossyConversion:来获得一个带有有损编码ASCII内容的string的NSData表示,然后将其扔在std::string

正如Ynau在评论中所build议的那样,在一般情况下,将所有东西放在堆栈而不是堆(使用new在堆上创buildstring)会更好,因此(假设使用UTF8编码):

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

正如philjordan.eu所指出的那样, NSString也可能是零。 在这种情况下,演员应该这样做:

//注意:如果foo是零,这将产生一个空的C ++string

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

这会导致你这样一个转换:

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