Массив байтов в Python - PullRequest
       44

Массив байтов в Python

69 голосов
/ 11 сентября 2011

Как я могу представить байтовый массив (как в Java с byte []) в Python?Мне нужно отправить его по телеграфу с Gevent.

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

Ответы [ 4 ]

70 голосов
/ 11 сентября 2011

В Python 3 мы используем объект bytes, также известный как str в 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])

Мне удобнее использовать модуль base64 ...

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

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

Вы также можете использовать литералы ...

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

# Python 2
key = '\x13\0\0\0\x08\0'
30 голосов
/ 11 сентября 2011

Просто используйте bytearray (Python 2.6 и более поздние версии), который представляет изменяемую последовательность байтов

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

Индексируя get и устанавливает отдельные байты

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

, и если вынужно как str (или bytes в Python 3), это так же просто, как

>>> bytes(key)
'\x13\xff\x00\x00\x08\x00'
5 голосов
/ 11 июля 2015

Альтернатива, которая также имеет дополнительное преимущество, заключающееся в простом протоколировании выходных данных:

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

позволяет выполнять простые замены, например:

hexs = "13 00 00 00 08 {:02X}".format(someByte)
logging.debug(hexs)
key = bytearray.fromhex(hexs)
3 голосов
/ 11 сентября 2011

Ответ Дитриха, вероятно, просто то, что вам нужно для того, что вы описываете, отправка байтов, но более близким аналогом коду, который вы предоставили, например, будет использование типа bytearray.

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