Konvertieren von Hex-String in Int in Python

Rayven Esplanada 10 Oktober 2023
  1. Verwenden Sie int(), um Hex in Int in Python zu konvertieren
  2. Konvertieren einer Hex-Zeichenkette ohne Präfix in Python in Int
  3. Konvertierung einer Hex-Zeichenkette mit Präfix in Int in Python
  4. Little- und Big-Endian-Hex-String in Python in Int umwandeln
  5. Hex in vorzeichenbehaftete Ganzzahl in Python konvertieren
Konvertieren von Hex-String in Int in Python

Dieses Tutorial demonstriert, wie man in Python die Hex-Zeichenkette in int umwandelt. Es werden verschiedene Hex-Formate wie signed, little und big-endian, 0x annotated hexadecimal und der Standard-Hex-String behandelt.

Verwenden Sie int(), um Hex in Int in Python zu konvertieren

Die gebräuchlichste und effektivste Art, Hex in Python in eine ganze Zahl zu konvertieren, ist die Verwendung der Typumwandlungsfunktion int().

Diese Funktion akzeptiert zwei Argumente: ein obligatorisches Argument, das der zu konvertierende Wert ist, und ein zweites optionales Argument, das die Basis des Zahlenformats ist, wobei die Vorgabe 10 ist.

Andere Zahlenformate sind 2 für binär, 8 für oktal und 16 für hexadezimal. Wenn Sie 0 als Argument für den Basiswert angeben, wird das Zahlenformat aus dem Präfix des Wertes abgeleitet. Wenn kein Präfix vorhanden ist, wird der Wert automatisch als dezimal, 0b für binär, 0o für oktal und 0x für hexadezimal erkannt.

Konvertieren einer Hex-Zeichenkette ohne Präfix in Python in Int

Wenn die hexadezimale Zeichenkette nicht vorangestellt ist, dann geben Sie den Basiswert der Funktion int() mit 16 an.

Ein Beispiel:

hex_val = "beef101"

print(int(hex_val, 16))

Ausgabe:

200208641

Das Ergebnis ist die dezimale oder ganzzahlige Umwandlung des Hex-Werts beef101.

Konvertierung einer Hex-Zeichenkette mit Präfix in Int in Python

Wenn die Hex-Zeichenkette ein Präfix 0x hat, dann ändern Sie das Basiswert-Argument in 0, um das Präfix automatisch zu erkennen.

Sie können immer noch 16 als Basis übergeben, aber wenn Sie es mit mehreren Werten mit unterschiedlichen Zahlenformaten zu tun haben, ist die Übergabe von 0 der beste Ansatz.

hex_val = "0xdeadcab"

print(int(hex_val, 0))
print(int(hex_val, 16))

Ausgabe:

233495723
233495723

Little- und Big-Endian-Hex-String in Python in Int umwandeln

Little-Endian- und Big-Endian-Byte-Ordnung sind zwei Arten von Ordnungssystemen für Hexadezimalzahlen. Die Standardreihenfolge ist Little-Endian, bei der die höchstwertige Zahl ganz rechts in der Sequenz steht, während Big-Endian genau das Gegenteil tut.

In Anbetracht dessen müssen wir nur den Big-Endian-Hexadezimalwert in einen Little-Endian-Wert konvertieren. Danach kann nun die übliche Konvertierung daran durchgeführt werden.

Um eine hexadezimale Big-Endian-Zeichenkette in eine Little-Endian-Zeichenkette zu konvertieren, verwenden Sie bytearray.fromhex() und wenden die Funktion reverse() auf das Ergebnis an. Anschließend konvertieren Sie den hexadezimalen Wert wieder in einen String und wandeln ihn in eine Ganzzahl um.

big_endian = "efbe"


def to_little(val):
    little_hex = bytearray.fromhex(val)
    little_hex.reverse()
    print("Byte array format:", little_hex)

    str_little = "".join(format(x, "02x") for x in little_hex)

    return str_little


little_endian = to_little(big_endian)

print("Little endian hex:", little_endian)
print("Hex to int:", int(little_endian, 16))

Um diesen Codeblock zusammenzufassen:

  • Rufen Sie bytearray.fromhex() auf, um den Big-Endian-Hex-String in einen Byte-Array-Hexadezimalwert zu konvertieren.
  • Reversieren Sie das Byte-Array, um das Big-Endian-Format in ein Little-Endian-Format zu konvertieren.
  • Konvertieren Sie den Byte-Array-Wert zurück in einen Hex-String im Little-Endian-Format.
  • Konvertieren Sie die Zeichenkette mit int() in eine Ganzzahl.

Ausgabe:

Byte array format: bytearray(b'\xbe\xef')
Little endian hex: beef
Hex to int: 48879

Hex in vorzeichenbehaftete Ganzzahl in Python konvertieren

Um ein beliebiges Zahlenformat in eine vorzeichenbehaftete Ganzzahl zu konvertieren, benötigen wir eine Operation namens Zweierkomplement, die eine bitweise mathematische Operation für vorzeichenbehaftete Zahlen ist.

Bevor wir also hexadezimal in eine vorzeichenbehaftete Ganzzahl konvertieren können, müssen wir eine Funktion definieren, die die Operation des Zweierkomplements ausführt.

def twosComplement_hex(hexval):
    bits = 16  # Number of bits in a hexadecimal number format
    val = int(hexval, bits)
    if val & (1 << (bits - 1)):
        val -= 1 << bits
    return val

Das Bit ganz links in einem Binärwert wird als Bit mit Vorzeichen bezeichnet und bestimmt, ob die Ganzzahl positiv oder negativ ist. Diese Funktion reserviert dieses Bit als vorzeichenbehaftetes Bit und verschiebt die anderen Bits zum Ausgleich mit dem bitweisen Linksschiebeoperator <<.

Nun geht es an die eigentliche Umwandlung des Hex-Wertes in vorzeichenbehaftete int.

hex_val1 = "ff"
hex_val2 = "ffff"
hex_val3 = "aaff"


def twosComplement_hex(hexval):
    bits = 16
    val = int(hexval, bits)
    if val & (1 << (bits - 1)):
        val -= 1 << bits
    return val


print(twosComplement_hex(hex_val1))
print(twosComplement_hex(hex_val2))
print(twosComplement_hex(hex_val3))

Ausgabe:

255
-1
-21761

Jetzt haben wir die Konvertierung eines Hex-Strings in eine vorzeichenbehaftete Ganzzahl erreicht.

Zusammenfassend haben wir die Konvertierung verschiedener Typen von Hexadezimalformaten in vorzeichenbehaftete und vorzeichenlose Ganzzahlen behandelt. Verwenden Sie int() mit den Argumenten value und base, um eine Hexadezimalzahl in eine Ganzzahl ohne Vorzeichen zu konvertieren.

Wenn die Hexadezimalzahl in einem Big-Endian-Format vorliegt, konvertieren Sie sie zuerst mit bytearray.fromhex() und reverse() in ein Little-Endian-Format.

Wenn Sie schließlich eine hexadezimale Zeichenkette in eine Ganzzahl mit Vorzeichen umwandeln müssen, führen Sie die Operation Zweierkomplement an dem hexadezimalen Wert durch, um einen Ganzzahlwert mit Vorzeichen zu erhalten.

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

Verwandter Artikel - Python Hex

Verwandter Artikel - Python Integer