1

因此,由于某种原因,当我在 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 '⺖' 字符
        [0x00000001] 0x2e93 '⺓' 字符
        [0x00000002] 0x2e84 '⺄' 字符
        [0x00000003] 0x2e91 '⺑' 字符
        [0x00000004] 0x2ee3 '⻣' 字符
        [0x00000005] 0x2ebd '⺽' 字符
        [0x00000006] 0x2efb '⻻' 字符
        [0x00000007] 0x2ebd '⺽' 字符
4

2 回答 2

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]);
}
于 2012-07-19T20:22:03.330 回答
2

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

因此,使用类似intor的数据结构short来保存它们,并L在文字前使用说明符:

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

您的代码将正常工作。

于 2012-07-19T19:43:23.367 回答