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

问题描述

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

我尝试过

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

当MSB为0时,它的确工作得很好,但是我使用2的补数表示负数,但不适用于它们

例如。这是它的打印内容

ffffff9f负数,8位数字。

0b680c-正数,可以,为6位数字。

我的数字永远不会太大而无法容纳24位,因此它们应始终适合6个十六进制字符,但是我该如何制作,因此它将修剪左侧部分以始终精确地打印6位数字?

解决方法

将数字转换为unsigned long,作为副作用,这将确保2的补码表示,即使目标为负数使用了其他表示形式;然后用0xFFFFFF遮罩。即

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

保证最大程度地可移植;即在具有16位整数的目标,负数的不同表示形式等目标上进行工作(我相信不必将外部强制转换为无符号长,因为0xFFFFFF应该是