Frage
Wie kann ich ein Byte-Array (wie in Java mit Byte []) in Python darstellen?Ich muss es mit gevent über den Draht schicken.
byte key[] = {0x13, 0x00, 0x00, 0x00, 0x08, 0x00};
Lösung
In Python 3 verwenden wir das bytes
-Objekt, das in Python 2 auch als str
bezeichnet wird.
# Python 3
key = bytes([0x13, 0x00, 0x00, 0x00, 0x08, 0x00])
# Python 2
key = ''.join(chr(x) for x in [0x13, 0x00, 0x00, 0x00, 0x08, 0x00])
Ich finde es bequemer, das base64
-Modul zu verwenden ...
# Python 3
key = base64.b16decode(b'130000000800')
# Python 2
key = base64.b16decode('130000000800')
Sie können auch Literale verwenden ...
# Python 3
key = b'\x13\0\0\0\x08\0'
# Python 2
key = '\x13\0\0\0\x08\0'
Andere Tipps
Verwenden Sie einfach einen bytearray
(Python 2.6 und höher), der eine veränderbare Folge von Bytes darstellt.
>>> key = bytearray([0x13, 0x00, 0x00, 0x00, 0x08, 0x00])
>>> key
bytearray(b'\x13\x00\x00\x00\x08\x00')
Indizierung holt und setzt die einzelnen Bytes
>>> key[0]
19
>>> key[1]=0xff
>>> key
bytearray(b'\x13\xff\x00\x00\x08\x00')
und wenn Sie es als str
(oder bytes
in Python 3) benötigen, ist es so einfach wie
>>> bytes(key)
'\x13\xff\x00\x00\x08\x00'
Eine Alternative, die auch den zusätzlichen Vorteil hat, dass die Ausgabe einfach protokolliert werden kann:
hexs = "13 00 00 00 08 00"
logging.debug(hexs)
key = bytearray.fromhex(hexs)
Mit können Sie einfache Ersetzungen wie folgt vornehmen:
hexs = "13 00 00 00 08 {:02X}".format(someByte)
logging.debug(hexs)
key = bytearray.fromhex(hexs)
Dietrichs Antwort ist wahrscheinlich genau das, was Sie für das, was Sie beschreiben, benötigen: Senden von Bytes, aber ein näheres Analogon zu dem Code, den Sie beispielsweise angegeben haben, wäre die Verwendung des bytearray
-Typs.
>>> key = bytearray([0x13, 0x00, 0x00, 0x00, 0x08, 0x00])
>>> bytes(key)
b'\x13\x00\x00\x00\x08\x00'
>>>