将int保存为char?

时间:2014-04-05 18:15:42

标签: c types range

我试图将整数保存为字符。

char i = 80;
printf("0x%x", i);

上面的代码显示0x50(1个字节)。但如果该值大于128,则会打印一个4字节的值。

char i = 130;
printf("0x%x", i); // this prints 0xffffff82

如果值大于128,如何将整数值存储为1个字节(在第二个示例中仅打印82而不是ffffff82)?

1 个答案:

答案 0 :(得分:1)

这是签署了char类型的系统上的预期行为:char的负值被符号扩展为int的大小。

如果您想打印最后八位,可以使用0xFF进行屏蔽,如下所示:

printf("0x%x", i & 0xFF); // this prints 80

Demo on ideone

另一种方法是使用unsigned char。这将避免8位数字的符号扩展,最高位设置为1