Tableau d'octets en python
Question
Comment puis-je représenter un tableau d'octets (comme en java avec octet []) en python? Je devrai l'envoyer sur le fil avec Gevent.
byte key[] = {0x13, 0x00, 0x00, 0x00, 0x08, 0x00};
La solution
Dans Python 3, nous utilisons le bytes
objet, également connu sous le nom str
Dans 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'
Autres conseils
Utilisez simplement un bytearray
(Python 2.6 et plus tard) qui représente une séquence mutable d'octets
>>> 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 comme un str
(ou bytes
Dans Python 3), c'est aussi simple que
>>> bytes(key)
'\x13\xff\x00\x00\x08\x00'
Une alternative qui a également l'avantage supplémentaire de connecter facilement sa sortie:
hexs = "13 00 00 00 08 00"
logging.debug(hexs)
key = bytearray.fromhex(hexs)
vous permet de faire des substitutions faciles comme tel:
hexs = "13 00 00 00 08 {:02X}".format(someByte)
logging.debug(hexs)
key = bytearray.fromhex(hexs)
La réponse de Dietrich est probablement juste la chose dont vous avez besoin pour ce que vous décrivez, l'envoi d'octets, mais un analogue plus proche du code que vous avez fourni par exemple serait d'utiliser le bytearray
taper.
>>> key = bytearray([0x13, 0x00, 0x00, 0x00, 0x08, 0x00])
>>> bytes(key)
b'\x13\x00\x00\x00\x08\x00'
>>>