HOWTO · Python

Konvertieren von Hex-String in Int in Python

Es wird demonstriert, wie man in Python Hexadezimalzahlen in Ganzzahlen umwandelt

Auf dieser Seite

Verwende int(value, 16), um eine hexadezimale Zeichenkette in Python in eine Ganzzahl umzuwandeln. Mit der Basis 0 erkennt Python ein Präfix wie 0x; int.from_bytes() eignet sich, wenn die Eingabe Bytes mit festgelegter Byte-Reihenfolge oder Vorzeichenbreite darstellt.

Mit int() Hexadezimalzahlen in Python in Ganzzahlen umwandeln

Die Funktion int() akzeptiert eine Zeichenkette und eine optionale Basis. Die Standardbasis ist 10; für hexadezimale Zeichenketten gibst du daher 16 an. Bei int(value, base) legt das zweite Argument die Basis der Eingabezeichenkette fest, nicht die Bitbreite. Ersetze value durch den zu lesenden Hexadezimaltext.

Hexadezimalzeichenkette ohne Präfix in Python in eine Ganzzahl umwandeln

Bei hexadezimalen Ziffern ohne Präfix 0x oder 0X gibst du die Basis 16 ausdrücklich an. Das ist nützlich für Werte aus Textdateien, APIs oder Benutzereingaben.

hex_string = "1a"
integer_value = int(hex_string, 16)
print(integer_value)
26

Das Ergebnis ist 26: Mit der Basis 16 interpretiert int() jede Ziffer hexadezimal. Enthält die Zeichenkette ein Präfix, kannst du ebenfalls die Basis 16 verwenden oder int() das Präfix erkennen lassen, wie im nächsten Beispiel gezeigt.

Hexadezimalzeichenkette mit Präfix in Python in eine Ganzzahl umwandeln

Bei einer hexadezimalen Zeichenkette mit Präfix weist die Basis 0 int() an, die Basis anhand eines erkannten Präfixes wie 0x oder 0X zu bestimmen. Auch die Basis 16 akzeptiert diese Präfixe. Die Basis 0 ist hilfreich, wenn die Eingabe auch andere von Python unterstützte Präfixe für Ganzzahlen enthalten kann.

hex_string = "0x1a"
integer_value = int(hex_string, 0)
print(integer_value)
26

Da die Zeichenkette mit 0x beginnt, liest Python die übrigen Ziffern als Hexadezimalzahl und erhält 26. Bei der Basis 0 ist ein erkanntes Präfix erforderlich; eine Zeichenkette ohne Präfix wird dadurch nicht automatisch als hexadezimal interpretiert. Fehlt das Präfix, verwende die Basis 16.

Hexadezimalzeichenfolgen mit Little-Endian und Big-Endian in Python in Ganzzahlen umwandeln

Little-Endian und Big-Endian beschreiben, wie die Bytes einer Folge einer Ganzzahl zugeordnet werden. Für hexadezimalen Text allein gibt es keine standardmäßige Byte-Reihenfolge. Bei den Bytes ef be steht ef bei Big-Endian an erster Stelle; bei Little-Endian ist ef das niederwertigste Byte. Übergib die gewünschte Reihenfolge an int.from_bytes():

data = bytes.fromhex("ef be")
big_value = int.from_bytes(data, byteorder="big")
little_value = int.from_bytes(data, byteorder="little")
print(big_value, little_value)
61374 48879

bytes.fromhex() erstellt die Folge aus zwei Bytes. byteorder legt fest, wie diese Bytes zum Ergebnis beitragen: Big-Endian ergibt 61374, Little-Endian ergibt 48879. So bleibt die Byte-Reihenfolge ausdrücklich festgelegt, ohne dass du eine Hexadezimalzeichenkette manuell umkehren musst.

Hexadezimalzahlen in Python in vorzeichenbehaftete Ganzzahlen umwandeln

Ein gewöhnlicher Aufruf wie int("ffff", 16) liefert eine nichtnegative Ganzzahl. Um Hexadezimalziffern als vorzeichenbehafteten Wert zu interpretieren, legst du die Bytebreite fest und dekodierst die Bytes mit signed=True. Bei einem 16-Bit-Wert steht ffff im Zweierkomplement für -1:

hex_string = "ffff"
data = bytes.fromhex(hex_string)
signed_value = int.from_bytes(data, byteorder="big", signed=True)
print(signed_value)
-1

bytes.fromhex("ffff") liefert zwei Bytes. Die vorzeichenbehaftete Umwandlung hat daher eine Breite von 16 Bit und ergibt -1. Das höchste Bit ist gesetzt; das Zweierkomplement bestimmt den vorzeichenbehafteten Wert. Wähle Byte-Reihenfolge und Breite entsprechend dem Datenformat, das du dekodierst. int() allein erkennt weder das eine noch das andere.