HEX值到wchar_t字符(UTF-8)的转换



我持有无符号整数size_t中的十六进制值,希望将它们转换为wchar_t以保存在数据结构中,并在有效时打印为std::cout,因为它是UTF-8符号/字符。

我尝试过强制转换,但没有成功:例如,size_t h = 0x262E;在对wchar_t执行强制转换时打印9774

一些最小代码:

#include <iostream>
#include <vector>
int main() {
std::setlocale( LC_ALL, "" );
auto v = std::vector<size_t>( 3, 0x262E ); // 3x peace symbols
v.at( 1 ) += 0x10; // now a moon symbol
for( auto &el : v )
std::cout << el << " ";
return 0;
}

输出:9774 9790 9774我想要的:☮ ☾ ☮

我可以使用printf( "%lc ", (wchar_t) el );打印符号。有更好的"现代"C++解决方案吗?

我需要能够在linux上打印0000-27BFUTF-8范围内的任何内容

您需要使用wchar_t强制转换的std::wcout来打印宽字符,而不是std::cout

以下是您更正的功能代码(示例(:

#include <iostream>
#include <vector>
int main() {
std::setlocale( LC_ALL, "" );
auto v = std::vector<size_t>( 3, 0x262E ); // 3x peace symbols
v.at( 1 ) += 0x10; // now a moon symbol
for( auto &el : v )
std::wcout << (wchar_t) el << " "; // <--- Corrected statement
return 0;
}

输出:

☮ ☾ ☮

如果您有十六进制字符串编号,您可以使用此解决方案。

相关内容

  • 没有找到相关文章

最新更新