以下是引用Leviszzz在2017-3-29 16:33:36的发言:
在此一同谢谢各位大佬们了!!感激不尽。
不过我还是没有搞懂啊。
1.所以显示“?”是因为超出标准码范围,系统默认显示“?”了吗?
2.然后197和198上溢就是显示一个负数,那为什么8楼的兄弟算出来的结果又不对呢?
QAQ好复杂哦。
1、字符内码197属扩展码部分,如果显示输出设备不支持单字节扩展字符显示模式,看到的可能会是“乱码”,就象常说到的半个汉字乱码现象:
#include <stdio.h>
main()
{
char *s="牌";
printf("%d %d\n", (unsigned char)s[0],(unsigned char)s[1]);
printf("%d %d\n", s[0],s[1]);
printf("%c %c\n", s[0],s[1]);
printf("%c%c\n", s[0],s[1]);
}
2、197与-59,是同一问题的两个方面,一个BYTE有符号[-128,127]与无符号[0,255]。对于char类型,C没有默认是signed还是unsigned,至于当char(%c)转换成int(%d)时是有符号或是无符号,这个与硬件有关,这个问题在ARM的机器上试试可能会看到不同的结果。
[此贴子已经被作者于2017-3-30 06:11编辑过]