gpt4 book ai didi

c++ - 使用字符串格式限制十六进制数字的数量

转载 作者:行者123 更新时间:2023-11-28 04:53:37 25 4
gpt4 key购买 nike

我在 4 个字符的项目中以十六进制显示值,因为该值是 16 位。在这种情况下,值也已签名,这就是我的问题所在。

我的代码:

int16_t i = -4;
printf("i = %04x\n", i);

输出:

i = fffffffc

我希望十六进制输出保持仅 16 位,而不是切换为 32 位表示。它为正值所做的。

期望的输出:

i = fffc

是否有一种很好的方法来指定十六进制数字的总数,或者将输出锁定为与最小值相同? (理想情况下不必求助于将值作为字符串进行操作 :) )

哦,我还认为这可能是编译器的问题,因为我第一次在 Visual C++ 中体验过它,但在 Linux 下使用 GCC 进行测试得到了相同的结果。

最佳答案

printf() 的 C 风格输出

说明符 "%x"适用于无符号整数。你的int16_t在调用中得到整数提升,有符号数-4以二进制编码为整数 fffffffc那就是这样。

specifier "%x" 的问题也就是说,格式字符串中的大小和精度是最小位数。所以不可能强制格式化来截断输出。但是,您可以使用 binary-and 强制获得预期结果。 (运营商 &):

printf("i = %04x\n", i & 0xffff);  // put as much f as digits you want to keep

C++风格的输出

对于 C++ 流,您还可以使用 <iomanip> 格式化为十六进制:

cout<<setw(4)<< setfill('0')<<hex<<i<<endl;

ostream 不执行整数提升,只使用您输出的值的类型。

Online demo

关于c++ - 使用字符串格式限制十六进制数字的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47642218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com