而不是printf("%c", my_char),用于%d打印数字(ASCII)值.
还要考虑printf("%hhu", c);精确指定转换为unsigned char并打印其十进制值.
所以我实际上在我的C编译器上测试了这个,看看发生了什么,结果很有趣:
char c = '\xff';
printf("%c\n", c);
printf("%u\n", c);
printf("%d\n", c);
printf("%hhu\n", c);
Run Code Online (Sandbox Code Playgroud)
这是印刷的:
? (printed as ASCII)
4294967295 (sign extended to unsigned int)
-1 (sign extended to int)
255 (handled correctly)
Run Code Online (Sandbox Code Playgroud)
感谢caf,指出这些类型可能会以意想不到的方式进行推广(这显然是针对%d和%u案例).此外,看起来%hhu情况是回到a char unsigned,可能会修剪符号扩展.