如何将wchar\u t转换为unicode数字?

如何将wchar\u t转换为unicode数字?,c,unicode,C,Unicode,如何在unicode表中将wchar值转换为数字 我有一个变量: wchar_t znak; znak=getwchar(); 我键入“ą”如何将znak转换为#261 我需要unicode表中的数字 ąU+0105带OGONEK的拉丁文小写字母A UTF-16:0x0105 XML:ą 标准没有指定sizeof(wchar\u t)(或其编码),因此您应该说明您使用的是什么系统 假设*nix(Linux、BSD、OSX等) wchar\u t为32位,存储UTF-32码点,这是一种固

如何在unicode表中将wchar值转换为数字

我有一个变量:

wchar_t znak;
znak=getwchar();
我键入“ą”如何将znak转换为#261 我需要unicode表中的数字

ąU+0105带OGONEK的拉丁文小写字母A

UTF-16:0x0105


XML:ą

标准没有指定
sizeof(wchar\u t)
(或其编码),因此您应该说明您使用的是什么系统

假设*nix(Linux、BSD、OSX等)
wchar\u t
为32位,存储UTF-32码点,这是一种固定长度编码。您可以直接使用
znak
,无需转换

尽管您应该首先检查UTF-8和
char
是否比您的任务更好(对于转换,UTF-32肯定更好,但您的程序可能做得更多)

如果您确定UTF-8对于您的程序来说是一个总体上更好的选择,那么您可以使用从UTF-8代码点中获取一个UTF-32代码点

假设窗口
wchar\u t
为16位,存储UTF-16LE代码单元。对于控制台I/O,您仅限于UCS-2。区别在于UTF-16不是固定长度编码。所谓的代理项对(尽管很少)允许表示非代码点

因此,在您的情况下,直接使用
znak
也可以

不过,为了完成,这里有一个可能的实现:

u32从utf16()读取代码点
{
u16代码_单位=getu16();

如果(code\u unit>=0xD800&&code\u unit=0xDC00&&code\u unit\u 2标准没有指定
sizeof(wchar\u t)
(或其编码),那么您应该说明您所使用的系统

假设*nix(Linux、BSD、OSX等)
wchar\u t
为32位,存储UTF-32码点,这是一种固定长度编码。您可以直接使用
znak
,无需转换

尽管您应该首先检查UTF-8和
char
是否比您的任务更好(对于转换,UTF-32肯定更好,但您的程序可能做得更多)

如果您确定UTF-8对于您的程序来说是一个总体上更好的选择,那么您可以使用从UTF-8代码点中获取一个UTF-32代码点

假设窗口
wchar\u t
为16位,存储UTF-16LE代码单元。但对于控制台I/O,您仅限于UCS-2。区别在于UTF-16不是固定长度编码。所谓的代理项对(尽管很少见)允许表示非代码点

因此,在您的情况下,直接使用
znak
也可以

不过,为了完成,这里有一个可能的实现:

u32从utf16()读取代码点
{
u16代码_单位=getu16();
如果(code\U unit>=0xD800和code\U unit=0xDC00和code\U unit\U 2
0x105
(base-16)是
261
(base-10)。
0x105
(base-16)是
261
(base-10)。小调:
“0x%04x
而不是
”0x%x
u32 read_code_point_from_utf16()
{
  u16 code_unit = getu16();
  if (code_unit >= 0xD800 && code_unit <= 0xDBFF) {
    u16 code_unit_2 = getu16();
    if (code_unit_2 >= 0xDC00 && code_unit_2 <= 0xDFFF)
       return (code_unit << 10) + code_unit_2 - 0x35FDC00;
    push_back(code_unit_2);
  }
return code_unit;
}