有很多关于如何在C ++中输出unicode字符的信息。 我可以使用以下代码执行此操作。这输出一个小写'h'。
cout << '\u0068' << endl;
是否有可能走另一条路。也就是说,输入'h'并让cout在控制台中显示0068(unicode number)?
我用Google搜索了这个并没有发现任何东西。我不想构建一个查找表/ switch语句等。虽然可能有简单的方法将unicode字符转换为他们的unicode数字,使用上面这么简单的东西。 任何线索。
答案 0 :(得分:3)
关键是你必须制作数据的类型,以便编译器选择导致数字输出的operator<<()
的重载cout
。您可以随意设置std::hex
iomanip标记,char
或wchar_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";
}