例子:
printf("%d %d\n", ip[0],ip[1]);
将打印 -64、-88。如果你加上 256 得到 192 168
无符号字符 a = -64; printf("%d", a);
将打印 192。知道发生了什么吗?
ip[]
是一个字符数组,就其值(value)而言。
最佳答案
Plain char
具有实现定义的签名,在您的情况下 signed
。
因为 printf
是可变参数函数,所以应用默认提升,这意味着您的 char
被提升为 int
,保留值。
除非你告诉 printf 你传递了一个 unsigned char
,它会认为它是一个 int
或 unsigned int
并且不能撤销这些提升,含义:192 因为 char 是 -64 因为 int 是 -64 解释为无符号是 4294967195。
对于 unsigned char
,正确的格式说明符是 "%hhu"
。
顺便说一句:具体数字假设CHAR_BIT==8, sizeof(int)==4, 2s-complement representation
。
关于c++ - API 为 IP 返回 "incorrect"值,但如果您添加 256 或将负数输入 uchar,它就可以工作。发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23145162/