如何在c中打印带符号的十六进制

Dav*_*vid 15 c hex

我知道我们可以使用printf("%04X",value); 打印无符号十六进制值

c中是否有类似的标志或函数可用于打印带符号的十六进制值?

像这样的东西

BINARY   HEX(SIGNED) HEX (UNSIGNED)
-------- ----------- --------------

00000010 +0x2        0x2
00000001 +0x1        0x1
00000000 +0x0        0x0
11111111 -0x1        0xFF
11111110 -0x2        0xFE
11111101 -0x3        0xFD
Run Code Online (Sandbox Code Playgroud)

R..*_*R.. 10

不幸的是,C的printf功能无法直接执行此操作.你当然可以尝试:

printf("%s%x\n", x<0?"-":"", x<0?-(unsigned)x:x);
Run Code Online (Sandbox Code Playgroud)

编辑:我相信我修复了处理问题INT_MIN......

  • wuahhh,现在那是一个丑陋的黑客......没有其他任何东西,甚至在 C99 中也没有?如果不是:该死的,C. (2认同)

Mic*_*ker 5

不,但你可以做类似的事情

printf("%c%04X", (x<0) ? '-' : ' ', (x<0) ?-x : x);
Run Code Online (Sandbox Code Playgroud)

但是,正如其他人指出的那样,这样做是否有正当理由值得怀疑。根据你的帖子,你确实明白你的要求,所以这都是你的错;-)

  • (1) 这是C,不是C++。它们是完全不同的语言。(2) 即使在 C++ 中,可变参数函数也会受到默认提升的影响。将 char 传递给 printf 总是不可能的。至于负数的问题,您声称“(x&lt;0)?-x:x”,“如果 x 有符号,则代码使用一元 - 运算符没有意义,因为 x 已经在所需的值中了。格式。”。我不确定你所说的“格式”是什么意思,但是 `x` 没有所需的*值*,这才是这里重要的。此外,`(x&lt;0)?-x:x` 总是有与简单的“x”相同的符号(无符号与有符号)。 (5认同)
  • @Lundin:这不是混淆。考虑格式字符串较长且涉及 4 个要按带符号打印的十六进制值的情况。您想要一个包含 16 个“printf”语句的 if/else 树,还是一个处理整个事情的“printf”语句? (4认同)
  • @Lundin:你的第二条和第三条评论只是**严重错误**。“-”在 C 中首先具有类型“int”,而不是“char”。并且不可能将类型“char”传递给可变参数函数。`%c` 需要一个 `int` 类型的参数。至于第三条评论,当然一元“-”运算符对有符号值有意义。并且**签名**与**负数**并不意味着同一件事。它(大致)意味着拥有积极或消极的特征。在这一点上我认为你应该停止评论并给自己找一本关于C语言的好书...... (4认同)

unw*_*ind -1

“有符号”十六进制值是什么意思?你想要类似“ -e0”的东西吗?如果是这样,那意味着什么?该符号已经以十六进制显示形式表示,因为它显示了所有位,这就是数字中的所有信息。

  • 嗯,它可以解释为十六进制值,前面有符号。人们是否出于正当理由想要它是另一回事:) (2认同)