如何将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]);