用C ++输出Unicode数字(不是字符)

时间:2013-09-08 02:37:01

标签: c++ unicode

有很多关于如何在C ++中输出unicode字符的信息。 我可以使用以下代码执行此操作。这输出一个小写'h'。

cout << '\u0068' << endl;

是否有可能走另一条路。也就是说,输入'h'并让cout在控制台中显示0068(unicode number)?

我用Google搜索了这个并没有发现任何东西。我不想构建一个查找表/ switch语句等。虽然可能有简单的方法将unicode字符转换为他们的unicode数字,使用上面这么简单的东西。 任何线索。

1 个答案:

答案 0 :(得分:3)

关键是你必须制作数据的类型,以便编译器选择导致数字输出的operator<<()的重载cout。您可以随意设置std::hex iomanip标记,charwchar_t的类型将始终选择输出可读字符的operator<<(),而不是其值。要让编译器选择将打印值的operator<<(),您必须将该字符转换为数字类型。在下面的示例中,我将其转换为uint32_t,因为32位足以表示任何unicode字符。我可以把它投射到我系统上的int,因为在我的系统上,整数是32位,但为了确保你的代码可以移植到即使是int为16位的小型嵌入式系统你几乎没有足够的内存来处理ASCII,更不用说unicode,你应该把它转换为保证32位或更多的类型。 long也足够了。

#include <iostream>
#include <iomanip>
#include <stdint.h>

int main()
{
    cout << hex << '\u0068' << dec << endl;
    wchar_t c;
    std::wcout << "Type a character... " << std::endl;
    std::wcin >> c;
    std::wcout << "Your character was '" << c << "' (unicode "
               << std::hex << std::setw(4) << static_cast<uint32_t>(c) << ")\n";
}