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};
In Python 3 verwenden wir das bytes
Objekt, auch str
in Python 2 bekannt.
# 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 benutzen ...
# 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'
base64.b16decode(x)
einfach verwendenx.decode("hex")
. Damit kommen Sie zumindest mit einem Import weniger aus. :)Verwenden Sie einfach a
bytearray
(Python 2.6 und höher), das eine veränderbare Folge von Bytes darstellt>>> key = bytearray([0x13, 0x00, 0x00, 0x00, 0x08, 0x00]) >>> key bytearray(b'\x13\x00\x00\x00\x08\x00')
Durch die Indizierung werden die einzelnen Bytes abgerufen und festgelegt
>>> key[0] 19 >>> key[1]=0xff >>> key bytearray(b'\x13\xff\x00\x00\x08\x00')
und wenn Sie es als
str
(oderbytes
in Python 3) benötigen , ist es so einfach wie>>> bytes(key) '\x13\xff\x00\x00\x08\x00'
quelle
fubar = str(key); print(len(key), len(fubar))
produziert6 38
. In jedem Fall (1) ist "string" eine sehr vage Terminologie (2), wenn er Veränderlichkeit will, kann er seine ursprüngliche Listestr
andersbytearray
in Python 3 zu arbeiten - behoben. Ich erwähnte die Veränderlichkeit hauptsächlich, um sie von zu unterscheidenbytes
, aber der Punkt ist auch, dass Sie keinen Zwischenschritt benötigen, um Ihre Daten überhaupt in einemlist
zu haben.struct.pack("<IH", 19, 8)
...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)
ermöglicht es Ihnen, einfache Substitutionen wie folgt vorzunehmen:
hexs = "13 00 00 00 08 {:02X}".format(someByte) logging.debug(hexs) key = bytearray.fromhex(hexs)
quelle
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' >>>
quelle
bytearray
ist wirklich der richtige Weg, wenn Sie ein Byte-Array möchten.bytearray('b', ...)
nicht funktioniert. Oder Sie können es einfach löschen.