根据 P. Prinz 和 T. Crawford 所著的书 C in a Nutshell (2015),
如果
类型有符号,那么字符常量的值也可以为负数,因为常量的值是字符代码从char
到char
的类型转换的结果。int
他们举了这个例子:
int c = '\xA3'; // Symbol for pounds sterling
printf("Character: %c Code: %d\n", c, c);
根据这本书,产生
Character: £ Code: -93
在带有
char
签名的系统上。
我的问题是关于“字符代码从
char
到int
的转换”。有些字符占用一个以上字节。例如,在我的系统上 printf("%d\n", 'م')
打印 55685
。那么在这种情况下谈论从 char
到 int
的转换有意义吗?
是的,这确实有道理,因为
char
不是一个角色,尽管名字的选择很不幸。例如,文本的 UTF-8 表示形式使用一到四个 char
来表示一个可打印字符。
为了避免代码读者认为
char
是一个字符,以及可能存在带符号的 char
,您应该使用 uint8_t
来使字节解释清晰。