Ich habe eine lange Hex-Zeichenfolge, die eine Reihe von Werten unterschiedlichen Typs darstellt. Ich möchte diesen Hex-String in ein Byte-Array konvertieren, damit ich jeden Wert herausschieben und in den richtigen Datentyp konvertieren kann.
149
Antworten:
Angenommen, Ihre Hex-Zeichenfolge ist so etwas wie
Konvertieren Sie es in einen String (Python ≤ 2.7):
oder seit Python 2.7 und Python 3.0:
Beachten Sie, dass dies
bytes
eine unveränderliche Version von istbytearray
.quelle
string
->bytes
Objekt sucht , ergibt sich `bytes.fromhex (" 000102030405060708090A0B0C0D0E0F ")`b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'
. Nicht als Antwort posten, da die Frage nach dem Byte-Array fragt, sondern hier posten, da dies der erste Treffer ist, den ich bei der Suche nach Text in Bytes erhalten habe.hex_string.decode("hex")
arbeitet an Python 2.7. Ich habe gerade auf meinem getestetPython 2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)] on win32
.bytes.fromhex
ein Fehler ausgelöst wird, wenn die Eingabezeichenfolge eine ungerade Anzahl von Zeichen enthält:bytes.fromhex("aab")
→ValueError: non-hexadecimal number found in fromhex() arg at position 3
.In bytearray ist eine Funktion integriert, die genau das tut, was Sie beabsichtigen.
Es gibt ein Bytearray zurück und liest Hex-Strings mit oder ohne Leerzeichen.
quelle
hex_string.decode("hex")
nicht jedoch.vorausgesetzt, ich habe es richtig verstanden, sollten Sie nach binascii.unhexlify suchen
quelle
unhexlify
der effizienteste Weg ist, würde aber vorschlagen, dassb = bytearray(s)
dies besser ist als die Verwendungord
. Da Python einen eingebauten Typ nur für Arrays von Bytes hat, bin ich überrascht, dass niemand ihn verwendetAngenommen, Sie haben eine solche Byte-Zeichenfolge
"\ x12 \ x45 \ x00 \ xAB"
und Sie kennen die Anzahl der Bytes und deren Typ. Sie können diesen Ansatz auch verwenden
Da ich am Anfang der Formatzeichenfolge Little Endian (mit dem Zeichen '<') angegeben habe, hat die Funktion das Dezimaläquivalent zurückgegeben.
0x12 = 18
0x45 = 69
0xAB00 = 43776
B ist gleich einem Byte (8 Bit) ohne Vorzeichen
H ist gleich zwei Bytes (16 Bit) ohne Vorzeichen
Weitere verfügbare Zeichen und Bytegrößen finden Sie hier
Die Vorteile sind ..
Sie können mehr als ein Byte und das Endian der Werte angeben
Nachteile ..
Sie müssen wirklich die Art und Länge der Daten kennen, mit denen Sie sich befassen
quelle
Sie sollten in der Lage sein, eine Zeichenfolge mit den Binärdaten zu erstellen, indem Sie Folgendes verwenden:
Dies ist wahrscheinlich nicht der schnellste Weg (viele Zeichenfolgen werden angehängt), aber recht einfach, wenn nur Kern-Python verwendet wird.
quelle
Sie können das Codecs-Modul in der Python-Standardbibliothek verwenden, d. H.
quelle
quelle
Ein guter Einzeiler ist:
Dadurch wird jedes Zeichen in der Zeichenfolge durchlaufen und über die Funktion ord () ausgeführt. Nur auf Python 2.6 getestet, nicht sicher über 3.0+.
-Josh
quelle
byte_list = bytearray(hex_string)