将带有锐音符的字符分配给 C int 变量

Assigning a character with an acute into a C int variable

鉴于此 C 指令:

int c = 'é';

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

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

请注意,如果我改为使用此指令:

int c = 0xE9;

我得到 0x000000e9 作为 c 的值。

谢谢你帮助我。

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

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

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