как напечатать подписанный гекс в c - PullRequest
15 голосов
/ 07 марта 2012

Я знаю, что мы можем использовать printf ("% 04X", значение); напечатать шестнадцатеричные значения без знака

существует ли аналогичный флаг или функция в c, которую можно использовать для печати шестнадцатеричных значений со знаком?

что-то похожее на это

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

00000010 +0x2        0x2
00000001 +0x1        0x1
00000000 +0x0        0x0
11111111 -0x1        0xFF
11111110 -0x2        0xFE
11111101 -0x3        0xFD

Ответы [ 3 ]

10 голосов
/ 07 марта 2012

К сожалению, функция C printf не может сделать это напрямую.Вместо этого вы можете попробовать:

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

Редактировать : Мне кажется, я решил проблему с обработкой INT_MIN ...

3 голосов
/ 07 марта 2012

Нет, но вы можете сделать что-то вроде

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

Но, как указывают другие, сомнительно, есть ли веская причина для этого. Не забудьте точно понять, о чем вы просите.

РЕДАКТИРОВАТЬ : согласно редактированию вашего поста, вы понимаете, о чем просите, так что это ваша вина; -)

0 голосов
/ 07 марта 2012

Что вы подразумеваете под шестнадцатеричным значением со знаком?Вы хотите что-то вроде "-e0"?Если так, что бы это значило?Знак уже представлен на шестнадцатеричном дисплее, поскольку он показывает все биты, и это вся информация, которая есть в числе.

...