将NSString转换为std :: string

时间:2013-03-05 15:32:00

标签: objective-c nsstring objective-c++ stdstring

我尝试将NSString传递给C ++函数,但我只得到第一个字母。这是代码:

#import <Foundation/Foundation.h>
#import <string>
int main(int argc, const char * argv[])
{

@autoreleasepool {
    NSString* objcString=@"test";
    std::string cppString([objcString cStringUsingEncoding:NSUnicodeStringEncoding]);
    NSLog(@"%@, %s",objcString, cppString.c_str()
          );

}
return 0;
}

它给了我:

2013-03-05 10:22:15.362 TEST[1136:353] test, t

感谢您的时间,祝您有个美好的一天。

4 个答案:

答案 0 :(得分:2)

编码错误。 NSUnicodeStringEncoding返回UTF-16字符串。字符“t,e,s,t”适合一个字节 - 因此在UTF-16中,它们由非零字节和零字节表示。零告诉NSLog()它是字符串的结尾。请改用NSUTF8StringEncoding

答案 1 :(得分:1)

怎么样:

std::string cppString([objcString UTF8String]);

答案 2 :(得分:1)

我认为这个答案可能会对您有所帮助:How do I convert a NSString into a std::string?

诚信:

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

答案 3 :(得分:0)

我在我的代码中使用NSUTF8Encoding而不是NSUnicodeEncoding无处不在。