2013-03-05 193 views
2

我尝试将NSString传递给C++函数,但我只能得到第一个字母。下面是代码:将NSString转换为std :: string

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

@autoreleasepool { 
    NSString* [email protected]"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 

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

回答

2

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

+0

但是如果我想用异国情调角色作为“é”,我该怎么办? – impact27 2013-03-05 15:56:20

+0

@ user1987722相同。 UTF-8不是ASCII码。 – 2013-03-05 15:57:09

+0

非常感谢!这非常有帮助 – impact27 2013-03-05 16:33:55

1

如何:

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

我这样做是无处不在我的代码与NSUTF8Encoding而不是NSUnicodeEncoding

相关问题