将std :: string转换为utf-16(就像你的“某些字符串”);调试器告诉“不存在合适的转换”

时间:2016-11-11 12:45:44

标签: c++ unicode utf-16 stdstring char16-t

基于我之前的问题 C++: Convert hex representation of UTF16 char into decimal (like python's int(hex_data, 16))

我想知道如何将字符串转换为 char16_t 的unicode:

作为

int main()
{   
    char16_t c = u'\u0b7f';
    std::cout << (int)c << std::endl;
    return 0;
}

产生十进制 2943 非常好,我现在需要知道如何将一个4位数的字符串注入 char16_t c = u'\ uINSERTHERE'

我的stringstream_s包含4个十六进制表示字母,如'0b82'(十进制: 2946 )或'0b77'(十进制) : 2935 )。

我试过

std::string stringstream_s;
....stringstream_s gets assigned....
char16_t c = (u'\u%s',stringstream_s);

它给了我“没有合适的转换函数从std :: string到char16_t存在”

基本上讲,如何将字符串转换为unicode utf16 .....?

当我只有一个'0b7f'

的字符串时,我需要知道u'\ u0b7f'的等价物

1 个答案:

答案 0 :(得分:0)

您需要先将std::string转换为整数,然后才能将整数输入到char16_t。在这种情况下,std::stoi()将是最简单的解决方案:

std::string s = "0b82";
char16_t ch = (char16_t) std::stoi(s, nullptr, 16); 

或者,您可以改为使用std::istringstream

std::string s = "0b82";
unsigned short i;
std::istringstream(s) >> std::hex >> i;
char16_t ch = (char16_t) i;