当我尝试使用0x15
将0x75
打印到printf("%2x")
时,我看到预期的输出:
15
75
但是,如果我尝试打印0x85
或0x95
,请输出0xffffff85
和0xffffff95
。这是为什么?
#include <stdio.h>
int main()
{
char test = 0x85;
printf("\n test hex: %2x \n", test);
return 0;
}
输出:
test hex: ffffff85
答案 0 :(得分:8)
尝试u_char(好unsigned char
,R是对的)测试;
char已为您签名并正在转换为int。如果设置了高位0x80,则它将变为负数。
答案 1 :(得分:3)
由于test是一个 signed 字符,并且0x85和0x95(实际上在0x80和0xFF之间的任何内容)都设置了高位,因此当从它升级时,结果将设置为1的signed-extended。 char to int。
尝试将test声明为unsigned char。
答案 2 :(得分:2)
作为Seth答案的一个小扩展,您正在打印一个int-wide十六进制数字。 (这就是你的格式字符串所说的)。
如果要打印字符大小的十六进制数字,可以使用:
printf("test hex: %2hhx\n", test);