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};

War es hilfreich?

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'
>>> 

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top