C++ 如何将wchar\u t转换为int以显示代码点?
我的程序中有一个简单的函数,当时我想搞乱unicode并用它做一些事情。在这个函数中,我希望显示用户输入的字符的代码值。这似乎是可能的,以下是我的功能: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
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“&”)
的内容将显示为&:&
不可能找到像这样的宽字符的整数值吗在C++中,除了字符串和其他字符串外,不能添加任何字符串。没有从
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;
}