2

有很多关于如何在 C++ 中输出 unicode 字符的信息。我可以用下面的代码做到这一点。这会输出一个小写的“h”。

cout << '\u0068' << endl;

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

我已经用谷歌搜索死了,什么也没找到。我不想构建查找表/switch 语句等。尽管可能有一种简单的方法可以使用上述简单的方法将 unicode 字符转换为它们的 unicode 数字。任何线索。

4

1 回答 1

3

关键是您必须设置数据的类型,以便编译器选择重载operator<<()cout结果以产生数字输出。您可以根据需要设置std::hexiomanip 标志,a 的类型charwchar_t将始终选择operator<<()输出可读字符的,而不是它的值。要让编译器选择operator<<()将打印一个值的字符,您必须将字符转换为数字类型。在下面的示例中,我将其转换为 auint32_t因为 32 位足以表示任何 unicode 字符。我可以将它投射到int我的系统上,因为在我的系统上,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";
}
于 2013-09-08T03:14:36.770 回答