首页 > 解决方案 > 将 std::u16string 转换为 NSString

问题描述

在我的本机库中,我曾经使用此函数从 a 中返回NSStringa std::string

- (NSString*)return_my_cpp_string {
    NSString* result = [NSString stringWithCString:my_cpp_string.c_str() encoding:[NSString defaultCStringEncoding]];
    return result;
}

我现在需要更新这个函数,以便它返回 a NSStringout of anstd::u16string但我找不到任何明显的方法来做到这一点。

标签: c++iosobjective-c

解决方案


使用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;
}

推荐阅读