Formatbezeichner für Hex-Zeichen in C
-
12-12-2019 - |
Frage
Gibt es einen Formatbezeichner für? sprintf
in C, das a abbildet char
auf die gleiche Weise verhexen %x
Karten an int
verhexen?
Lösung
Ja und nein.
Seit sprintf
Nimmt eine variable Argumentliste, alle Argumente werden zuvor standardmäßig hochgestuft sprintf
empfängt sie.Das bedeutet sprintf
Wille niemals bekomme ein char
-- A char
wird immer befördert int
Vor sprintf
erhält es (und a short
wird auch).
Ja, seit wann sprintf
empfängt, wird ein sein int
, können Sie verwenden %x
um es in das Hex-Format zu konvertieren, und es funktioniert genauso, egal ob dieser Wert als begann char
, short
, oder int
.Wenn Sie (was oft der Fall ist) für jede Eingabe 2 Zeichen drucken möchten, können Sie Folgendes verwenden %2.2x
.
Beachten Sie jedoch einen Punkt:wenn dein char
signiert ist und Sie mit einem negativen Wert beginnen, erfolgt die Beförderung zu int
wird den gleichen numerischen Wert erzeugen, was normalerweise der Fall ist Gewohnheit dasselbe Bitmuster wie das ursprüngliche Zeichen sein, also (zum Beispiel) ein Zeichen mit dem Wert -1
wird normalerweise als ausgedruckt ffff
Wenn int
ist 16 Bit, ffffffff
wenn int 32 Bit ist, oder ffffffffffffffff
Wenn int
beträgt 64 Bit (unter der Annahme der typischen Zweierkomplementdarstellung für vorzeichenbehaftete ganze Zahlen).
Andere Tipps
Das ist dasselbe %x
.Alle char
Werte werden konvertiert int
bevor es weitergegeben wird sprintf
(oder jede andere Funktion, die eine variable Anzahl von Parametern akzeptiert).
printf("%x\n", 'a');
druckt 61