使用字符串格式限制十六进制数字的数量
Limit the number of hex digits with string formatting
我在4个字符的项目中显示值,因为值为16位。在这种情况下,值也被签名,这就是我的问题所在。
我的代码:
int16_t i = -4;
printf("i = %04xn", i);
输出:
i = fffffffc
我想要的是仅保留16位而不切换到32位表示形式的十六进制。它适用于正值。
所需的输出:
i = fffc
是否有一种很好的方法来指定十六进制数字的总数,或者锁定输出与最小值相同?(理想情况下,不必诉诸于字符串的值来操纵值:))
哦,我也认为这可能是编译器的内容,因为我在Visual C 中经历了它,但是使用GCC
进行测试在Linux下给出了相同的结果。
printf()
的C样式输出指定符"%x"
适用于无符号整数。您的int16_t
在呼叫中获得整数促销,并且符号编号-4
在二进制中编码为整数fffffffc
,然后将其作为此类进行。
指定符"%x"的问题是,格式字符串中的大小和精度是数字的最小数量。因此,不可能强制格式截断输出。但是,您可以用二进制和(操作员&
)强制预期结果:
printf("i = %04xn", i & 0xffff); // put as much f as digits you want to keep
C 样式输出
使用C 流,您也可以使用<iomanip>
格式为十六进制:
cout<<setw(4)<< setfill('0')<<hex<<i<<endl;
Ostreams不执行整数促销,而只使用输出的值类型。
在线演示
感谢皮特·贝克尔(Pete Becker)解释了根本原因:int16_t
被提升为int
,在我的系统上是32位,因此负数为32位十六进制表示。通过将i
施放到printf
中CC_13中,符号从int
隐藏,并且可以根据需要进行格式。
int16_t i = -4;
printf("i = %04xn", (uint16_t) i);
输出:
i = fffc
相关文章:
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 在Arduino中将字符串转换为(逗号分隔的十六进制)字符串到无符号字符数组
- 将浮点数向量转换为十六进制/二进制字符串
- 从char阵列中提取十六进制数字
- 如何在 c++ 中将十六进制数字转换为字符
- 如何将十六进制值字符串转换为 base64 字符串
- 使用字符串格式限制十六进制数字的数量
- 从输入中找到连续十六进制数字的最大数量
- 将十六进制数字从无符号字符转换为字符串
- 从 bin 文件 -c++ 中读取十六进制数字为每个字符 2 位数字
- 在 AES 256 加密++中获取十六进制加密字符串
- 如何从十六进制设置字符串值
- 重载输出运算符给出十六进制数字而不是字符串
- 将十六进制数的 char[] 转换为对应于 ASCII 表中十六进制数字的字母的 char[] 并反转
- 从包含十六进制数字的std::string或QString创建std::bitset或QBitArray
- "first-chance exception..."消息中的十六进制数字是什么意思?
- 在一行代码中输入2个十六进制数字和一个字符串
- 将std::字符串数字转换为十六进制数字
- string控制字符:将十六进制数字赋给字符串
- c++编译器什么时候开始考虑在字符串转义中使用两个以上的十六进制数字?