我有一个NSString
对象,想将其转换为std::string
。
在Objective-C++中应该如何做?
我有一个NSString
对象,想将其转换为std::string
。
在Objective-C++中应该如何做?
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String]);
编辑:几年之后,让我扩展一下这个答案。正如指出的那样,如果您最终要使用std :: string
,则通常会希望使用cStringUsingEncoding:
与NSASCIIStringEncoding
一起使用。您可以在普通的std :: strings
中使用UTF-8,但请注意,这些操作是基于字节而不是字符或甚至图形符号的。对于一个很好的“入门”,请查看这个问题及其答案。
还要注意,如果您有一个无法表示为ASCII的字符串,但仍然希望以std :: string
的形式使用它,并且您不希望其中包含非ASCII字符,那么可以使用dataUsingEncoding:allowLossyConversion:
来获取具有有损编码ASCII内容的字符串的NSData
表示,然后将其传递给std :: string
。
如评论中 Ynau 建议的那样,在一般情况下,最好将所有内容保持在堆栈上而不是堆上(使用new
会将字符串创建在堆上),因此(假设采用 UTF8 编码):
NSString *foo = @"Foo";
std::string bar([foo UTF8String]);
如在philjordan.eu上所提到的,NSString也可能是nil
。在这种情况下,类型转换应该像这样进行:
// 注意:如果foo是nil,这将产生一个空的C ++字符串
// 而不是从UTF8String解除引用NULL指针。
这将导致你做出这样的转换:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String], [foo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
strYouHave.assign([foo UTF8String], [foo lengthOfBytesUsingEncoding:NSUTF8StringEncoding])
- c00000fd