当我尝试在C中打印出一些unicode字符作为十六进制时,由于某种原因它们都具有相同的值

时间:2012-07-19 19:36:58

标签: c printing printf

所以出于某种原因,当我用C打印出来时,所有这些UNICODE字符看起来都具有相同的值。有人知道为什么吗?

char input[8] = {'⺖', '⺓', '⺄', '⺑', '⻣', '⺽', '⻻', '⺽'};
for( i = 0; i < 9; i++)
{
    printf("Input number equivelents in hex %x, in int %i\nj", input[i], (int)input[i]);
}

这是UNICODE在C#中对应的内容。在C中,它们打印为0x3f。

C#
        [0x00000000]    0x2e96 '⺖'  char
        [0x00000001]    0x2e93 '⺓'  char
        [0x00000002]    0x2e84 '⺄'  char
        [0x00000003]    0x2e91 '⺑'  char
        [0x00000004]    0x2ee3 '⻣'  char
        [0x00000005]    0x2ebd '⺽'  char
        [0x00000006]    0x2efb '⻻'  char
        [0x00000007]    0x2ebd '⺽'  char

2 个答案:

答案 0 :(得分:3)

您还需要在每个常量之前加上L

wchar_t input[8] = {L'⺖', L'⺓', L'⺄', L'⺑', L'⻣', L'⺽', L'⻻', L'⺽'};
for( i = 0; i < 9; i++)
{
    printf("Hex: %x, Int: %i\n", input[i], (int)input[i]);
}

答案 1 :(得分:2)

您需要另一种数据结构来保存这些字符,因为一个字符(传统上是8位,或0x00 - 0xFF)不能包含它们。

因此,使用像intshort这样的数据结构来保存它们,并在文字前使用L说明符:

int input[8] = { L'⺖', L'⺓', L'⺄', L'⺑', L'⻣', L'⺽', L'⻻', L'⺽' };

您的代码将正常运行。