【问题标题】:How do print exactly X digits in hex如何以十六进制精确打印 X 位
【发布时间】:2020-08-23 08:24:47
【问题描述】:

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

我试过了

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

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

例如。这是它打印的内容

ffffff9f负数,8位。

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

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

【问题讨论】:

    标签: c c89 ansi-c


    【解决方案1】:

    将数字转换为unsigned long,作为副作用,这将确保 2 的补码表示,即使目标对有符号负数使用了一些其他表示;然后用0xFFFFFF 屏蔽。即

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

    保证最大的便携性;即处理具有 16 位整数、负数的不同表示等的目标。(我相信外部强制转换为 unsigned long 是不必要的,因为 0xFFFFFF 应该是

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 2013-05-02
      • 2013-02-18
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多