Подтвердить что ты не робот

Как печатать подписанный hex в c

Я знаю, что мы можем использовать 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
4b9b3361

Ответ 1

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

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

Изменить. Я считаю, что я исправил проблему обработки INT_MIN...

Ответ 2

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

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

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

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

Ответ 3

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