web-dev-qa-db-fra.com

Byte Array in Python

Comment puis-je représenter un tableau d'octets (comme dans Java avec byte []) en Python? Je vais devoir l'envoyer par le biais de gevent.

byte key[] = {0x13, 0x00, 0x00, 0x00, 0x08, 0x00};
71
d0ctor

Dans Python 3, nous utilisons l'objet bytes, également appelé str in Python 2.

# 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])

Je trouve plus pratique d'utiliser le base64 module ...

# Python 3
key = base64.b16decode(b'130000000800')

# Python 2
key = base64.b16decode('130000000800')

Vous pouvez également utiliser des littéraux ...

# Python 3
key = b'\x13\0\0\0\x08\0'

# Python 2
key = '\x13\0\0\0\x08\0'
71
Dietrich Epp

Utilisez simplement un bytearray (Python 2.6 et ultérieur) qui représente une séquence d'octets modifiable

>>> key = bytearray([0x13, 0x00, 0x00, 0x00, 0x08, 0x00])
>>> key
bytearray(b'\x13\x00\x00\x00\x08\x00')

Indexation get et définit les octets individuels

>>> key[0]
19
>>> key[1]=0xff
>>> key
bytearray(b'\x13\xff\x00\x00\x08\x00')

et si vous en avez besoin en tant que str (ou bytes in Python 3), c'est aussi simple que

>>> bytes(key)
'\x13\xff\x00\x00\x08\x00'
30
Scott Griffiths

Une alternative qui présente également l’avantage supplémentaire de pouvoir facilement enregistrer sa sortie:

hexs = "13 00 00 00 08 00"
logging.debug(hexs)
key = bytearray.fromhex(hexs)

vous permet de faire des substitutions faciles comme ceci:

hexs = "13 00 00 00 08 {:02X}".format(someByte)
logging.debug(hexs)
key = bytearray.fromhex(hexs)
5
TomSchober

La réponse de Dietrich est probablement ce dont vous avez besoin pour décrire ce que vous décrivez, l'envoi d'octets, mais un analogue plus proche du code que vous avez fourni, par exemple, utiliserait le type bytearray.

>>> key = bytearray([0x13, 0x00, 0x00, 0x00, 0x08, 0x00])
>>> bytes(key)
b'\x13\x00\x00\x00\x08\x00'
>>>