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

时间:2012-03-07 14:07:39

标签: 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

4 个答案:

答案 0 :(得分:10)

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

printf("%s%x\n", x<0?"-":"", x<0?-(unsigned)x:x);

修改:我相信我修复了处理INT_MIN的问题......

答案 1 :(得分:3)

不,但你可以做类似

的事情
printf("%c%04X",(x<0)?'-':' ',(x<0)?-x:x);

但是,正如其他人指出的那样,是否有正当理由这样做是值得怀疑的。请务必准确了解您所要求的内容。

编辑:根据你的帖子的编辑,你明白你要求的是什么,所以这都是你的错; - )

答案 2 :(得分:1)

这是一个更简单的版本:

#include <stdio.h>
#include <stdib.h>
...
printf("%c%#x\n", "+-"[x < 0], (unsigned)abs(x));

答案 3 :(得分:0)

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