【发布时间】:2017-12-04 21:25:29
【问题描述】:
我在我的项目中以 4 个字符的十六进制显示值,因为该值为 16 位。在这种情况下,值也已签名,这就是我的问题所在。
我的代码:
int16_t i = -4;
printf("i = %04x\n", i);
输出:
i = fffffffc
我想要的是十六进制输出只保留 16 位,而不是切换到 32 位表示。它对正值有什么作用。
期望的输出:
i = fffc
有没有一种很好的方法来指定十六进制数字的总数,或者将输出锁定为与最小值相同? (理想情况下,不必将值作为字符串进行操作:))
哦,我也认为这可能是编译器的问题,因为我第一次在 Visual C++ 中体验过它,但在 Linux 下使用GCC 进行测试得到了相同的结果。
【问题讨论】:
-
这里的原因是
i被提升为int以调用printf,并且显然int在您的系统上是32 位宽。 -
感谢@PeteBecker 用那个宝石我想出了一个“修复”并将其添加为答案。
标签: c++ formatting hex printf string-formatting