C++ 如何将 Unicode wstring 显示为 Unicode 格式的数字
C++ How to display Unicode wstring as Number in Unicode format
我有一个 std::wstring 这样的:
std::wstring mystr = L"abc\U0000FFFF\U0000000A\U00000061\U00000010de";
我想将它打印到控制台,看起来应该是这样的:
abc\U0000FFFF\U0000000A\U00000061\U00000010de
当我尝试这个时:
for (int i = 0; i < 9; i++)
{
char16_t* ctest = &c[i];
std::cout << *ctest<< " ";
}
结果是
61 62 63 ffff a 61 10 64 65
如何获得我想要的输出?
只需在输出时检查每个字符。如果它在可打印的 ASCII 范围内,则将其输出为 char;否则将其输出为十六进制序列。
std::wstring mystr = L"abc\U0000FFFF\U0000000A\U00000061\U00000010de";
for (int i = 0; i < mystr.size(); ++i)
{
if (mystr[i] >= 0x20 && mystr[i] < 0xff)
cout << (char)mystr[i];
else
cout << "\U" << std::setfill('0') << std::right << std::setw(8) << std::hex << mystr[i];
}
输出与您想要的输出不同,因为您有两次字符“a”,一次作为单个字符,一次作为十六进制转义序列。编译字符串后,无法区分两者。
我有一个 std::wstring 这样的:
std::wstring mystr = L"abc\U0000FFFF\U0000000A\U00000061\U00000010de";
我想将它打印到控制台,看起来应该是这样的:
abc\U0000FFFF\U0000000A\U00000061\U00000010de
当我尝试这个时:
for (int i = 0; i < 9; i++)
{
char16_t* ctest = &c[i];
std::cout << *ctest<< " ";
}
结果是
61 62 63 ffff a 61 10 64 65
如何获得我想要的输出?
只需在输出时检查每个字符。如果它在可打印的 ASCII 范围内,则将其输出为 char;否则将其输出为十六进制序列。
std::wstring mystr = L"abc\U0000FFFF\U0000000A\U00000061\U00000010de";
for (int i = 0; i < mystr.size(); ++i)
{
if (mystr[i] >= 0x20 && mystr[i] < 0xff)
cout << (char)mystr[i];
else
cout << "\U" << std::setfill('0') << std::right << std::setw(8) << std::hex << mystr[i];
}
输出与您想要的输出不同,因为您有两次字符“a”,一次作为单个字符,一次作为十六进制转义序列。编译字符串后,无法区分两者。