Hex in Byte in Python konvertieren

Rayven Esplanada 19 September 2023
  1. Initialisieren eines hexadezimalen Werts
  2. Verwenden Sie die Funktion “bytes.fromhex()” zur Konvertierung von Hex in Byte in Python
  3. Verwenden Sie das Modul “binascii”, um Hex in Byte in Python umzuwandeln
  4. Verwenden Sie die Methode codecs.decode(), um in Python einen Hexadezimalwert in ein Byte umzuwandeln.
  5. Verwenden Sie Listenabstraktion und die int()-Funktion, um in Python Hexadezimal in Bytes umzuwandeln
  6. Fazit
Hex in Byte in Python konvertieren

Hexadezimal, oft abgekürzt als hex, verwendet 16 Symbole (0-9, a-f), um Werte darzustellen, im Gegensatz zu den 10 Symbolen des Dezimalsystems. Zum Beispiel entspricht 1000 im Dezimalsystem 3E8 in hexadezimaler Darstellung.

Das Beherrschen von hex ist entscheidend für Programmieraufgaben, die binäre Daten, Speicheradressen und codierungen auf niedriger Ebene beinhalten. Dieses Tutorial zeigt, wie man hexadezimale Werte in ein Byte-Literal in Python umwandelt.

Initialisieren eines hexadezimalen Werts

Erstellen wir einen hexadezimalen Wert aus einem String und wandeln wir den Satz “A quick brown fox” mit der Funktion “hexlify()” im Modul “binascii” in einen hexadezimalen Wert um.

Um einen String in hexadezimale Darstellung umzuwandeln, müssen wir zuerst den String in Bytes umwandeln.

import binascii

str_val = "A quick brown fox".encode("utf-8")
hex_val = binascii.hexlify(str_val).decode("utf-8")

print(hex_val)

Ausgabe:

4120717569636b2062726f776e20666f78

Jetzt haben wir erfolgreich einen String in hexadezimale Darstellung umgewandelt. Als nächstes wollen wir hexadezimal zurück in Bytes umwandeln.

Verwenden Sie die Funktion “bytes.fromhex()” zur Konvertierung von Hex in Byte in Python

Die Methode “bytes.fromhex()” ist dazu gedacht, einen gültigen hexadezimalen String in ein “bytes”-Objekt umzuwandeln. Sie hat die folgende Syntax:

bytes.fromhex(hex_string)
  • “hex_string”: Dies ist ein erforderliches Argument und stellt den Eingabe-Hexadezimalstring dar, den Sie in ein Byte-Literal umwandeln möchten.

So funktioniert die Methode “bytes.fromhex()”:

  1. Überprüfung der Eingabe: Die Methode überprüft zunächst den Eingabe-Hexadezimalstring, um sicherzustellen, dass er nur gültige hexadezimale Zeichen enthält (Ziffern 0-9 und Klein- oder Großbuchstaben A-F). Wenn der String andere Zeichen enthält, wird eine “ValueError” ausgelöst.
  2. Paarweise Aufteilung: Die Methode verarbeitet den Hexadezimalstring jeweils zwei Zeichen auf einmal und behandelt jedes Zeichenpaar als ein einzelnes hexadezimales Byte. Das bedeutet, dass für jedes Zeichenpaar im Eingabestring ein Byte im resultierenden “bytes”-Objekt erzeugt wird.
  3. Umwandlung in Bytes: Jedes Paar von hexadezimalen Zeichen wird in seine binäre Entsprechung umgewandelt.
  4. Konstruktion des “bytes”-Objekts: Während die Methode die Paare von hexadezimalen Zeichen verarbeitet, konstruiert sie ein “bytes”-Objekt, indem sie die binäre Darstellung jedes Bytes anfügt. Dieser Vorgang wird fortgesetzt, bis der gesamte Eingabestring verarbeitet wurde.
  5. Rückgabewert: Sobald der gesamte Eingabestring verarbeitet wurde, gibt die Methode das resultierende “bytes”-Objekt zurück, das dem Byte-Literal des Eingabe-Hexadezimalstrings entspricht.

Als Beispiel nehmen wir den Hex-Wert aus dem vorherigen Ergebnis und verwenden “fromhex()” um ihn in ein Byte-Literal umzuwandeln.

hex_val = "4120717569636b2062726f776e20666f78"

print(bytes.fromhex(hex_val))

Ausgabe:

b'A quick brown fox'

Lassen Sie uns den Beispiel-Hexadezimalstring “4120717569636b2062726f776e20666f78” analysieren, um besser zu verstehen, wie er in ein Byte-Literal umgewandelt wird:

  • “41” wird zum Byte 65 (ASCII-Wert von “A”).
  • “20” wird zum Byte 32 (ASCII-Wert von Leerzeichen).
  • “71” wird zum Byte 113 (ASCII-Wert von “q”).
  • “75” wird zum Byte 117 (ASCII-Wert von “u”).
  • “69” wird zum Byte 105 (ASCII-Wert von “i”).
  • “63” wird zum Byte 99 (ASCII-Wert von “c”).
  • “6b” wird zum Byte 107 (ASCII-Wert von “k”).
  • “20” wird zum Byte 32 (ASCII-Wert von Leerzeichen).
  • “62” wird zum Byte 98 (ASCII-Wert von “b”).
  • “72” wird zum Byte 114 (ASCII-Wert von “r”).
  • “6f” wird zum Byte 111 (ASCII-Wert von “o”).
  • “77” wird zum Byte 119 (ASCII-Wert von “w”).
  • “6e” wird zum Byte 110 (ASCII-Wert von “n”).
  • “20” wird zum Byte 32 (ASCII-Wert von Leerzeichen).
  • “66” wird zum Byte 102 (ASCII-Wert von “f”).
  • “6f” wird zum Byte 111 (ASCII-Wert von “o”).
  • “78” wird zum Byte 120 (ASCII-Wert von “x”).

Wenn all diese Bytes kombiniert werden, erhält man das Byte-Literal “A quick brown fox”, das das endgültige Ergebnis ist.

Verwenden Sie das Modul “binascii”, um Hex in Byte in Python umzuwandeln

Das Python-Modul “binascii” enthält effiziente Hilfsfunktionen für binäre und ASCII-Operationen. Insbesondere ist “unhexlify()” eine Funktion innerhalb des Moduls “binascii”, die einen hexadezimalen Wert in ein Byte-Literal umwandelt.

Diese Funktion hat die folgende Syntax:

binascii.unhexlify(hex_string)
  • hex_string: Dies ist das erforderliche Argument, das den Eingabe-Hexadezimalstring darstellt, den Sie in ein Byte-Literal umwandeln möchten.

Hier ist eine detaillierte Erklärung, wie es funktioniert:

  1. Überprüfung der Eingabe: Die Methode beginnt mit der Überprüfung des Arguments “hex_string”, um sicherzustellen, dass es nur gültige hexadezimale Zeichen enthält. Ungültige Zeichen im Eingabestring führen zu einer “binascii.Error” Ausnahme.
  2. Umwandlung der hexadezimalen Paare: Anschließend verarbeitet die Methode den “hex_string” in Paaren von Zeichen. Zum Beispiel entspricht “41” dem Byte mit dem Integer-Wert 65 (ASCII-Wert von “A”).
  3. Umwandlung in Bytes: Die hexadezimalen Byte-Paare werden in ihre binäre Darstellung umgewandelt. Jedes Paar wird in ein entsprechendes Byte umgewandelt, wobei jedes Zeichen 4 Bits darstellt.
  4. Erstellung des Byteliterals: Während die Methode jedes Paar verarbeitet, fügt sie die resultierenden binären Bytes aneinander, um ein vollständiges Byteliteral zu bilden. Dieser Prozess wird fortgesetzt, bis der gesamte Eingabestring verarbeitet wurde.
  5. Rückgabewert: Sobald der gesamte hex_string verarbeitet wurde, gibt die Funktion unhexlify() das resultierende Byteliteral als ein bytes-Objekt zurück.

Lassen Sie uns ein neues Beispiel mit speziellen nicht-ASCII-Zeichen initialisieren, die dann in einen hexadezimalen Wert umgewandelt werden. Das Beispiel wird die griechische Übersetzung des Satzes A quick brown fox sein.

import binascii
from binascii import unhexlify

str_val = "Μια γρήγορη καφέ αλεπού".encode(
    "utf-8"
)  # A quick brown fox in Greek translation
hex_val = binascii.hexlify(str_val).decode("utf-8")

print("String value: ", str_val.decode("utf-8"))
print("Hexadecimal: ", hex_val)
print("Byte value: ", unhexlify(hex_val))

Ausgabe:

String value:  Μια γρήγορη καφέ αλεπού
Hexadecimal:  ce9cceb9ceb120ceb3cf81ceaeceb3cebfcf81ceb720cebaceb1cf86cead20ceb1cebbceb5cf80cebfcf8d
Byte value:  b'\xce\x9c\xce\xb9\xce\xb1 \xce\xb3\xcf\x81\xce\xae\xce\xb3\xce\xbf\xcf\x81\xce\xb7 \xce\xba\xce\xb1\xcf\x86\xce\xad \xce\xb1\xce\xbb\xce\xb5\xcf\x80\xce\xbf\xcf\x8d'

Wir haben nun erfolgreich hexadezimale Werte in Bytes umgewandelt.

Verwenden Sie die Methode codecs.decode(), um in Python einen Hexadezimalwert in ein Byte umzuwandeln.

Die Funktion codecs.decode() kann auch zum Konvertieren eines hexadezimalen Strings in Bytes verwendet werden. Sie gehört zum Python-Modul codecs, das verschiedene Codierungs- und Decodierungsfunktionen für verschiedene Datenrepräsentationen bereitstellt.

Sie hat die folgende Syntax:

codecs.decode(data, encoding, errors="strict")
  • data: Dies ist das erforderliche Argument, das die zu entschlüsselnden Daten repräsentiert. In diesem Fall sollte es der hexadezimale String sein, den Sie in ein Byteliteral umwandeln möchten.
  • encoding: Dies ist auch ein erforderliches Argument, das die Codierung angibt, die für die Decodierung verwendet werden soll. Wenn Sie mit hexadezimalen Strings arbeiten, sollten Sie die Codierung hex verwenden, um anzugeben, dass der Eingabestring einen hexadezimalen Wert darstellt.
  • errors (optional): Dieses Argument gibt an, wie Decodierungsfehler behandelt werden sollen, z. B. wenn der Eingabestring ungültige Zeichen für die angegebene Codierung enthält. Der Standardwert ist strict, aber Sie können ihn auf ignore oder replace ändern, um Fehler unterschiedlich zu behandeln.

Hier ist eine ausführliche Erklärung, wie diese Methode funktioniert, wenn sie zum Decodieren von hexadezimalen Werten verwendet wird:

  1. Eingabeprüfung: Die Methode überprüft zuerst die Gültigkeit des Arguments data, um sicherzustellen, dass es nur gültige hexadezimale Zeichen enthält. Wenn der Eingabestring ungültige Zeichen enthält, wird eine UnicodeDecodeError mit Details über das problematische Zeichen ausgelöst.
  2. Decodierungsvorgang: Die Funktion codecs.decode() interpretiert das Argument data als hexadezimalen String und wandelt es in binäre Daten um. Sie verarbeitet den Eingabestring in Paaren von Zeichen und behandelt jedes Paar als ein einzelnes hexadezimales Byte.
  3. Codierungsspezifikation: Das Argument encoding ist in diesem Kontext entscheidend. Wenn Sie 'hex' als Codierung angeben, teilen Sie Python mit, dass der Eingabestring einen hexadezimalen Wert darstellt und entsprechend konvertiert werden soll.
  4. Umwandlung in Bytes: Während die Methode jedes Paar hexadezimaler Zeichen verarbeitet, konvertiert sie diese in ihre binäre Darstellung. Diese Umwandlung führt zur Erstellung eines Byteliterals, wobei jedes Zeichenpaar einem einzelnen Byte entspricht.
  5. Rückgabewert: Die Methode codecs.decode() gibt das resultierende Byteliteral als ein bytes-Objekt zurück, das die decodierten binären Daten repräsentiert.

Hier ist ein Beispiel:

import codecs

hex_val = "4120717569636b2062726f776e20666f78"
byte_val = codecs.decode(hex_val, "hex")
print(byte_val)

Dieses Programm decodiert den String hex_val unter Verwendung der Funktion codecs.decode() mit dem Argument encoding auf hex festgelegt. Dies bedeutet, dass der Eingabestring als hexadezimaler Wert interpretiert und in Bytes umgewandelt wird.

Ausgabe:

b'A quick brown fox'

Verwenden Sie Listenabstraktion und die int()-Funktion, um in Python Hexadezimal in Bytes umzuwandeln

Diese Methode beinhaltet die Verwendung von Listenabstraktion und der int()-Funktion, um einen hexadezimalen String in Bytes umzuwandeln.

hex_val = "4120717569636b2062726f776e20666f78"
byte_val = bytes([int(hex_val[i : i + 2], 16) for i in range(0, len(hex_val), 2)])
print(byte_val)

Hier verwendet der Code eine Listenabstraktion, um über den hexadezimalen String in Paaren von zwei Zeichen zu iterieren, wandelt jedes Paar in eine Ganzzahl im Basis-16-Format (hexadezimal) um und erstellt eine Liste dieser Ganzzahlen.

Der Konstruktor bytes() wird dann verwendet, um diese Liste von Ganzzahlen in ein Bytes-Objekt umzuwandeln.

Ausgabe:

b'A quick brown fox'

Diese Methode ist besonders nützlich, wenn wir einen hexadezimalen String mit einer bekannten Struktur haben und ihn effizient in Bytes umwandeln möchten. Sie bietet Kontrolle über den Umwandlungsprozess, indem sie uns erlaubt, die Codierungsbasis anzugeben (in diesem Fall Basis 16 für hexadezimal).

Fazit

In diesem Artikel haben wir einige Möglichkeiten behandelt, wie man hexadezimale Werte in Byte-Literale in Python umwandeln kann.

Die Funktion fromhex() ist vorzuziehen, wenn Sie keine zusätzlichen Importe in Ihren Quellcode aufnehmen möchten. Andernfalls können Sie die Methode wählen, die am besten Ihren Anforderungen und Ihrem Codierstil entspricht.

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 Bytes

Verwandter Artikel - Python Hex