代码之家  ›  专栏  ›  技术社区  ›  Keyboard embossed forhead

十六进制值到字符(UTF-8)的转换

  •  0
  • Keyboard embossed forhead  · 技术社区  · 6 年前

    我用无符号整数保存十六进制值 size_t 想把它们变成 wchar_t 保存在数据结构中,并可选地打印到 std::cout 有效时为UTF-8符号/字符。

    我试过选角,但没有成功: size_t h = 0x262E; 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++解决方案?

    我需要能够打印 0000-27BF 只有 .

    1 回复  |  直到 6 年前
        1
  •  2
  •   Azeem Rob Hyndman    6 年前

    你需要 std::wcout 具有 wchar_t 强制转换以打印宽字符而不是 std::cout .

    这是您更正的功能代码( live example

    #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;
    }
    

    输出:

    ☮ ☾ ☮
    

    如果您有十六进制字符串,您可以按照 this