c - 将 int 保存为 char?

标签 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)?

最佳答案

这是 char 类型有符号的系统上的预期行为:char 的负值被符号扩展为 int 的大小>.

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

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

Demo on ideone .

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

关于c - 将 int 保存为 char?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22884809/

相关文章:

Javascript INDEX_SIZE_ERR : DOM Exception 1 Error for ranges

C char 指针问题奇怪的值连接到最后

audio - 使用超出范围的SimpleAudioEngine音量范围是否安全?

C用execvp输出的另一个命令执行一个命令

python - 在 Python 中将 0x 字符串解释为十六进制

scala - 为什么该类型导致 "Product with Serializable with Animal"而不仅仅是 Animal?

java - 无法将 (int, double) 对添加到 HashMap<Integer, Double>

C++: boost 指向错误元素的范围迭代器

c - 这个程序会在 Turbo C 中编译吗?

c - 在 C 中打印 LONG_MIN