所以出于某种原因,当我用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
答案 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)不能包含它们。
因此,使用像int
或short
这样的数据结构来保存它们,并在文字前使用L
说明符:
int input[8] = { L'⺖', L'⺓', L'⺄', L'⺑', L'⻣', L'⺽', L'', L'⺽' };
您的代码将正常运行。