如何以十六进制精确打印 X 位数字

How do print exactly X digits in hex

我有一个整数,想要精确打印 6 位十六进制数。

我试过了

fprintf(stdout,"%06x\n",number);

当 MSB 为 0 时它确实工作得很好,但我使用 2 的补码来表示负数,但它对它们不起作用

例如。这是它打印的内容

ffffff9f负数,8位。

0b680c - 正数,OK,6 位数字。

我的数字永远不会太大而无法放入 24 位,所以它们应该总是适合 6 个十六进制字符,但我该怎么做,所以它会 trim 左边的部分总是精确地打印 6位数?

将数字转换为 unsigned long,作为 side-effect 这将 确保 2 的补码表示形式 即使目标使用其他表示形式表示带符号的负数;然后用 0xFFFFFF 掩码。即

fprintf(stdout,"%06lx\n", (unsigned long)number & 0xFFFFFFUL);

保证最大限度的便携性;即在具有 16 位整数的目标上工作,负数的不同表示等。(我相信外部转换为 unsigned long 是没有必要的,因为 0xFFFFFF 应该是