HOWTO · C

Einen Hexadezimalwert in C drucken

Dieser Artikel beschreibt, wie ein Hexadezimalwert in der Programmiersprache C gedruckt wird.

Auf dieser Seite

Um eine Ganzzahl in C hexadezimal auszugeben, übergeben Sie sie mit %x für Kleinbuchstaben oder %X für Großbuchstaben an printf. Zum Beispiel gibt printf("%x", 252); den Wert fc aus.

Eine Ganzzahl in C hexadezimal ausgeben

Die Hexadezimalschreibweise stellt eine Ganzzahl zur Basis 16 dar. Sie verwendet die Ziffern 0–9 und die Buchstaben a–f (oder A–F). Sie ist eine Darstellungsform des Werts und kein eigener C-Datentyp. Speichern Sie die Zahl in einem geeigneten Ganzzahltyp und lassen Sie dann den Konvertierungsspezifizierer von printf die Ausgabeform bestimmen. Der Argumenttyp muss zur Konvertierung passen: %x und %X erwarten nach den üblichen Integer-Promotions ein Argument vom Typ unsigned int.

scanf ist eine separate Eingabeoperation. Damit lässt sich eine hexadezimale Eingabe einlesen; wenn Sie bereits einen Wert haben, den Sie ausgeben möchten, benötigen Sie scanf dafür nicht.

Zwischen Klein- und Großbuchstaben für die Hexadezimalausgabe wählen

Verwenden Sie %x, wenn die Buchstaben in der Hexadezimalausgabe klein sein sollen, zum Beispiel fc. Mit %X erhalten Sie Großbuchstaben, etwa FC. Beide Konvertierungen stellen dieselbe Ganzzahl dar; nur die Groß- und Kleinschreibung der Buchstaben ändert sich. Setzen Sie die Konvertierung in der Formatzeichenkette an die Stelle, an der die Zahl erscheinen soll, und übergeben Sie printf das passende Ganzzahlargument.

Präfix, Feldbreite oder führende Nullen hinzufügen

Das Flag # fordert die alternative Form an: Bei einem Wert ungleich null fügt es für %x das Präfix 0x und für %X das Präfix 0X hinzu. Bei null wird kein Präfix ergänzt. Die Feldbreite gibt die minimale Gesamtbreite der Ausgabe einschließlich eines möglichen Präfixes an. Beispielsweise richtet %10x die Ziffern in einem mindestens zehn Zeichen breiten Feld rechtsbündig aus. Mit dem Flag 0, etwa in %010x, füllen Sie links mit Nullen auf, sofern keine Präzision angegeben ist.

Die Integer-Präzision legt die Mindestanzahl der Hexadezimalziffern fest. %.8x gibt zum Beispiel mindestens acht Ziffern aus und ergänzt bei Bedarf führende Nullen. Ist eine Präzision angegeben, wird das Flag 0 ignoriert. Mit # zusammen mit Feldbreite oder Präzision können Sie Präfix und Ziffern gemeinsam steuern. %#10.8x fordert beispielsweise die alternative Form und mindestens acht Ziffern innerhalb einer Mindestfeldbreite von zehn an.

Eine Dezimalzahl in eine Hexadezimalzahl umwandeln

Um 252 von Hand umzurechnen, teilen Sie wiederholt durch 16 und notieren die jeweiligen Reste: Bei 252 erhalten Sie den Quotienten 15 und den Rest 12; bei 15 erhalten Sie den Quotienten 0 und den Rest 15. Lesen Sie die Reste in umgekehrter Reihenfolge. Der Rest 15 entspricht f, der Rest 12 entspricht c; daher lautet 252 hexadezimal fc. printf übernimmt diese Umrechnung für ein passendes Ganzzahlargument. Die Division von Hand hilft also, das Ergebnis nachzuvollziehen, ist im Programm aber nicht erforderlich.

Ein vollständiges Beispiel kompilieren und ausführen

Dieses vollständige C-Programm gibt denselben Wert mit Klein- und Großbuchstaben aus und zeigt anschließend Feldbreite, Auffüllen mit Nullen, die alternative Form und Präzision. Das Beispiel wurde hier nicht ausgeführt; daher wird kein beobachtetes Ergebnis angegeben. Kompilieren Sie es mit einem C-Compiler, um die Formatierung auf Ihrem System zu sehen.

#include <stdio.h>

int main(void) {
    unsigned int value = 252;

    printf("lowercase: %x\n", value);
    printf("uppercase: %X\n", value);
    printf("width:     [%10x]\n", value);
    printf("zeroes:    [%010x]\n", value);
    printf("prefix:    [%#x]\n", value);
    printf("precision: [%.8x]\n", value);
    printf("zero with alternate form: [%#x]\n", 0u);

    return 0;
}