将std::u16string转换为NSString

4
在我的本地库中,我曾经使用这个函数来将一个std::string转换为一个NSString:
- (NSString*)return_my_cpp_string {
    NSString* result = [NSString stringWithCString:my_cpp_string.c_str() encoding:[NSString defaultCStringEncoding]];
    return result;
}

现在我需要更新这个函数,以便它返回一个NSString而不是std::u16string,但我找不到任何明显的方法来实现。

1个回答

3

请使用stringWithCharacters:length代替stringWithCString:encoding

stringWithCharacters接受一个指向UTF-16代码单元的C风格数组作为输入。std::u16string是一个UTF-16编码的字符串,所以您可以直接使用它的数据,例如:

- (NSString*)return_my_cpp_string {
    const unichar *pchars = (const unichar *) my_cpp_string.c_str();
    NSString* result = [NSString stringWithCharacters:pchars length:my_cpp_string.size()];
    return result;
}

我收到了一个错误信息:无法使用'rvalue'初始化'type 'const unichar * _Nonnull' (即 'const unsigned short *')的参数,因为类型不匹配。该'rvalue'的类型为'const std::__1::basic_string<char16_t, std::__1::char_traits<char16_t>, std::__1::allocator<char16_t> >::value_type *' (即 'const char16_t *') - Marinos K
我可以使用(const unichar*)转换来修复这个问题,它应该能够正常工作 - 只是想知道是否可以这么做? - Marinos K
@MarinosK 是的,这就是你需要做的。我已经更新了我的答案。 - Remy Lebeau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接