如何在 C 中以“0x”格式打印十六进制值

How to print hexadecimal values in "0x" format in C

提问人:ASWIN 提问时间:8/8/2023 最后编辑:chqrlieASWIN 更新时间:8/9/2023 访问量:255

问:

我正在尝试在 C 中打印十六进制值。

一个简单的已知程序,用于打印十六进制值...(使用或格式说明符)%x%X

#include<stdio.h>

int main()
{
    unsigned int num = 10;
    printf("hexadecimal value of %u is %x\n", num, num);
}

输出:hexadecimal value of 10 is a

我需要以十六进制格式获取输出,而不是获取输出,而不是以十六进制格式获取输出(如果对用户来说更明确,则中的值以十六进制格式表示)。a0xa

C 十六进制 printf 格式说明符

评论

1赞 paddy 8/8/2023
%#x也有效:见 en.cppreference.com/w/c/io/fprintf
0赞 ASWIN 8/8/2023
我不想在 %x 之前使用 ox。 %x 在 gcc (11.4.0) 编译器中,它不需要 unsigned int。
0赞 ASWIN 8/8/2023
@TomKarzes 请与我分享我可以正确查看文档的链接...
0赞 Tom Karzes 8/8/2023
@ASWIN 查看 printf(3) 的手册页 向下滚动到文档的位置。它说 无符号 int 参数转换为无符号八进制 (o)、无符号十进制 (u) 或无符号十六进制(x 和 X)表示法。修饰符记录在上面的“标志字符”下。o, u, x, X#
1赞 Tom Karzes 8/8/2023
@ASWIN 否,因为需要签名的 .您可以使用 代替 ,后者打印无符号十进制值。所以你可以这样做,这将是严格正确的,因为两个格式说明符都期望一个 .%dint%u%dunsigned int num = 10;printf("%u %#x\n", num, num);unsigned int

答:

2赞 chqrlie 8/8/2023 #1

有 2 种方法可以实现此目的:

  • 使用 ,这确保 even 被打印为 。 是打印小写数字和大写十六进制数字的唯一解决方案。但请注意,您不能使用 width 前缀,因为填充空格将出现在 和 数字之间: 将输出0x%x00x00x%Xx0xprintf(">0x%4x<", 100)>0x 64<

  • using ,如果数字不为零且与宽度前缀兼容,则添加前缀: 将输出 ,但两者都 和 将输出 。%#x0xprintf(">%#6x<", 100)> 0x64<printf(">%#06x<", 100)printf(">0x%04x<", 100)>0x0064<

2赞 nielsen 8/8/2023 #2

其他答案很好地解释了如何获得“0x”前缀。

我想补充一点,十六进制数字通常使用固定宽度(例如 2 或 4 位数字)。这可以通过以下方式获得:

  printf("0x%04x", num);

这将打印,例如

  0x0054