将具有锐角的字符分配到C int变量中

时间:2015-04-06 14:37:10

标签: c utf-8 character-encoding

鉴于此C指令:

int c = 'é';

在运行时,执行此指令后,如果我查看c的值,则当我期待0xffffffe9时,十六进制值为0x000000e9 ...

你能解释一下为什么它会像这样,以及我应该怎样做才能得到预期的结果?

请注意,如果我改为使用此说明:

int c = 0xE9;

我将0x000000e9作为c的值。

感谢您帮助我。

1 个答案:

答案 0 :(得分:0)

char已在您的平台上签名。 127以上的非ASCII字符常量实际上是负int值。尝试将非ASCII字符常量转换为(unsigned char),或者如果使用gccclang,请添加-funsigned-char作为命令行选项。

在源文件中使用非ASCII字符会导致出现问题。根据文本编辑器使用的编码和编译器的期望,您最终可能会遇到比您在此处遇到的更令人惊讶的行为。

最好完全避免它们...... Tant pis。