Frage

Gibt es einen Formatbezeichner für? sprintf in C, das a abbildet char auf die gleiche Weise verhexen %x Karten an int verhexen?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top