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


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

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

4 ответа:

в 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\x08'

# Python 2
key = '\x13\x08'

просто использовать 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'

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

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)

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

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