Printf十六进制格式化导致错误的输出

时间:2016-04-28 09:42:03

标签: c

我有以下C代码。

char a[] = "\x7f\x80";
printf("0x%02x\n",a[0]);
printf("0x%02x",a[1]);

它应该打印,

0x7f
0x80

但是我得到了关注?

0x7f
0xffffff80

我必须做出哪些更改才能获得输出 0x7f 0x80

谢谢,

1 个答案:

答案 0 :(得分:3)

使用正确的类型和转换说明符:

unsigned char a[] = "\x7f\x80";
printf("0x%02hhx\n",a[0]);
printf("0x%02hhx",a[1]);

转化说明符x需要无符号类型,长度修饰符hh用于unsigned char