在C语言中以大写形式打印短整型十六进制数

4

我想要以十六进制形式打印无符号短整型,例如0XFFFF。问题在于我想要小写的x而不是大写的X。我不知道该怎么做。

fprintf(c,"%#06X,\n\t", pixel[i]));

1
%Xunsigned short 的错误类型说明符,pixel[i] 也是错误的类型。 - too honest for this site
2
pixel[i] 是无符号短整型数组。 - Joedie 123
2
我已经假定了这一点。但你仍然传递了一个 int。请阅读有关整数提升的内容,以及在 C 标准中阅读 printf 手册、文档或定义。 - too honest for this site
1
不,不是。你为什么不读一下你使用的函数文档?信息可以在线获取。哦,至于 0x :这不可能自动完成(我也不喜欢这个)。但是有一个明显而简单的解决方案。记住,在格式字符串中也可以有普通文本。 - too honest for this site
@chux:我在哪里说它是UB了?虽然它不是正确的类型,但如果INT_MAX < USHRT_MAX`,它可能会调用实现定义的行为。为什么不使用专门用于此目的的类型说明符和类型呢? - too honest for this site
显示剩余4条评论
1个回答

15

将%X占位符更改为%x,您应该会得到小写字母:

fprintf(c, "%#06x\n", pixel[i]);

将数字输出为0xffff。如果pixel是无符号shorts数组且您想使格式与数据匹配,可以执行以下操作:

fprintf(c, "%#06hx\n", pixel[i]);

如果你真的想要0xFFFF,那很简单:

fprintf(c, "0x%04hX\n", pixel[i]);

1
我怀疑 OP 只是想要在问题中提到的 x 小写。请注意,参数必须为 unsigned int,以避免实现定义行为,这需要进行强制转换。 - too honest for this site
4
使用或不使用 (unsigned) 强制类型转换都不会涉及到实现定义的行为问题。 "0x%04hX" 显然是该用户所需要的。 - chux - Reinstate Monica
@chux - 我觉得你的评论是最好的答案,考虑到了短数据类型和十六进制格式。 - jww

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