如何在C语言中显示十六进制数?

59

我有一个数字列表如下:

0、16、32、48……

我需要将这些数字以十六进制输出为:

0000、0010、0020、0030、0040……

我已经尝试了一些解决方案,例如:

printf("%.4x", a); // Where a is an integer

但我得到的结果是:

0000,0001,0002,0003,0004 ...

我觉得我已经接近了。我该怎么修复它?

我不太擅长在C中使用printf


6
尝试使用printf("%d: %.4x\n", a, a),我认为你的变量a可能不是你认为的那个值。 - user180100
2
是的,你说得对。我精神恍惚了。对不起,这个愚蠢的问题... - user188276
4个回答

134

尝试:

printf("%04x",a);
  • 0 - 在指定的宽度内,左侧使用零(0)而不是空格进行填充。
  • 4 (width) - 要打印的最小字符数。如果要打印的值比此数字短,则通过在左侧使用填充字符将结果右对齐到此宽度。 默认情况下,这是一个空格,但我们使用的前导零指定零作为填充字符。即使结果更大,该值也不会被截断。
  • x - 十六进制整数的格式说明符。

更多信息请参见这里


1
它的结果是:0000,0001,0002,0003,0004...我需要的是:0000,0010,0020,0030,0040... - user188276
嗯,好奇怪啊...我试了一下,但总是显示为0000、0001、0002、0003、0004(我在Ubuntu上使用Eclipse和gcc...)。 - user188276
@tsubasa - 同时将它们作为十进制整数打印出来,以检查您的代码是否按照您的想法执行。 - detly
2
原始的%.4x格式符号是可以的,与%04x达到相同的结果。问题主要在于提供给printf()的数据。 - Jonathan Leffler

9
我是这样使用它的:
printf("my number is 0x%02X\n",number);
// Output: my number is 0x4A

只需将数字“2”更改为您想要打印的任意字符即可 ;)


1
您可以使用以下代码片段:

#include<stdio.h>
int main(int argc, char *argv[]){
    unsigned int i;
    printf("decimal  hexadecimal\n");
    for (i = 0; i <= 256; i+=16)
        printf("%04d     0x%04X\n", i, i);
    return 0;
}

它打印十进制和十六进制数,用零填充到4位。

1

你的代码没有问题。它以你想要的方式进行打印。或者,你也可以这样做:

printf("%04x",a);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接