21 Stimmen

Drucken von vorzeichenbehafteten Hexadezimalzahlen in C

Ich weiß, wir können die printf("%04X", value); um hexadezimale Werte ohne Vorzeichen zu drucken.

Gibt es ein ähnliches Flag oder eine Funktion in C, mit der Sie vorzeichenbehaftete Hex-Werte drucken können?

Etwas Ähnliches wie dies

Binary   Hex (signed) Hex (unsigned)
-------- ----------- --------------

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

14voto

Leider C's printf Funktion hat keine Möglichkeit, dies direkt zu tun. Sie könnten natürlich stattdessen versuchen:

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

Dies sollte auch für die Behandlung von INT_MIN funktionieren.

5voto

Nein, aber Sie können etwas tun wie

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

Aber, wie andere anmerken, ist es zweifelhaft, ob es dafür einen triftigen Grund gibt. Ihrem Beitrag zufolge verstehen Sie sehr wohl, worum Sie bitten, also ist es Ihre Schuld ;-)

3voto

chqrlie Punkte 110208

Hier ist eine einfachere Version:

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

-1voto

unwind Punkte 377331

Was verstehen Sie unter einem "vorzeichenbehafteten" Hexadezimalwert? Wollen Sie etwas wie " -e0 "? Wenn ja, was würde das bedeuten? Das Vorzeichen ist bereits in der hexadezimalen Anzeige enthalten, da sie alle Bits anzeigt, und das ist die einzige Information, die in der Zahl enthalten ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X