我尝试将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
感谢您的时间,祝您有个美好的一天。
答案 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
无处不在。