如何将整数转换为 std::u16string (C++11)?

J. *_*bal 7 c++ string casting c++11

没有方法std::to_u16string(...)。显然static_cast,这似乎不是进行这种转换的最合适的方法。

对于相反的转换, from stringto int,可以使用函数定义转换器std::stoi(),但是 from inttou16string它不起作用。

我尝试了以下方法:

int i = 1234;
std::u16string s;

std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert;
s = convert.from_bytes(std::to_string(i));

std::cout << s.str() << "  (" << s.length() << ")" << std::endl;
Run Code Online (Sandbox Code Playgroud)

我也尝试这样做:

typedef std::basic_stringstream<char16_t> u16ss;
u16ss ss;
ss << 1234;
std::u16string s = ss.str();
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

有没有办法直接进行这种转换,还是必须有一些中间转换?

101*_*010 4

您可以尝试以下操作:

std::u16string to_u16string(int const &i) {
  std::wstring_convert<std::codecvt_utf8_utf16<char16_t, 0x10ffff, std::little_endian>, char16_t> conv;
  return conv.from_bytes(std::to_string(i));
}
Run Code Online (Sandbox Code Playgroud)

现场演示

  • 请注意,这默认为大端字节顺序。如果你想要小端字节序,请尝试“std::codecvt_utf8_utf16&lt;char16_t, 0x10ffff, std::little_endian&gt;”。 (3认同)