1

我尝试将 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

4 回答 4

2

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

于 2013-03-05T15:37:13.893 回答
1

怎么样:

std::string cppString([objcString UTF8String]);
于 2013-03-05T15:33:52.870 回答
0

我在我的代码中普遍使用NSUTF8Encodingthat NSUnicodeEncoding

于 2013-03-05T15:34:13.340 回答
0

我认为这个答案可能会对您有所帮助:如何将 NSString 转换为 std::string?

为了完整性:

NSString *foo = @"Foo";
std::string *bar = new std::string([foo UTF8String]);
于 2013-03-05T15:35:58.123 回答