C++ 如何将wchar\u t转换为int以显示代码点?

C++ 如何将wchar\u t转换为int以显示代码点?,c++,character-encoding,widestring,widechar,C++,Character Encoding,Widestring,Widechar,我的程序中有一个简单的函数,当时我想搞乱unicode并用它做一些事情。在这个函数中,我希望显示用户输入的字符的代码值。这似乎是可能的,以下是我的功能: wstring listcode(wchar_t arg) { wstring str = L""; str += static_cast<int> (arg); //I tried (int) arg as well str += L": "; str += (wchar_t) arg; r

我的程序中有一个简单的函数,当时我想搞乱unicode并用它做一些事情。在这个函数中,我希望显示用户输入的字符的代码值。这似乎是可能的,以下是我的功能:

wstring listcode(wchar_t arg) {
    wstring str = L"";
    str += static_cast<int> (arg); //I tried (int) arg as well
    str += L": ";
    str += (wchar_t) arg;
    return str;
}
wstring列表代码(wchar\u t arg){
wstring str=L“”;
str+=static_cast(arg);//我也尝试了(int)arg
str+=L:“;
str+=(wchar_t)arg;
返回str;
}
现在如您所见,我只想显示整数值(如ascii字符,如
(int)“a”
),但类似
listcode(L“&”)
的内容将显示为
&:&


不可能找到像这样的宽字符的整数值吗int(或任何其他内容)到字符串的隐式转换。这就是字符串类型的设计方式。
您要做的是使用字符串流:

std::wstring listcode(wchar_t arg)
{
  std::wostringstream oss;
  oss << static_cast<int>(arg);
  oss << L": ";
  oss << arg;
  return oss.str();
}
std::wstring listcode(wchar\u t arg)
{
std::wostringstream-oss;

OSS,我认为你不应该把一个int定义成一个WString而不将它转换成一个字符串表示。它只返回int。它不需要,只需将它转换成一个WString,然后再添加到STR(我不知道如何正确地在C++中完成)。@wRAR:但这就是问题所在。
wchar\u t
并不总是表示单个代码点。如果
sizeof(wchar\u t)
为4(在所有POSIX平台上),则表示一个,但如果
sizeof(wchar\u t)
为2(在Windows上),则不表示,因为Unicode代码点在0-0x10FFFF范围内,需要两个以上字节。
void listcode(std::wostream os, wchar_t arg)
{
  os << static_cast<int>(arg);
  os << L": ";
  os << arg;
}