Как я могу представить массив байтов (как в Java с байтом []) в Python? Мне нужно будет отправить его по проводам с помощью gevent.
byte key[] = {0x13, 0x00, 0x00, 0x00, 0x08, 0x00};
Как я могу представить массив байтов (как в Java с байтом []) в Python? Мне нужно будет отправить его по проводам с помощью gevent.
byte key[] = {0x13, 0x00, 0x00, 0x00, 0x08, 0x00};
В 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'
Просто используйте bytearray
(Python 2.6 и более поздние версии), который представляет изменчивую последовательность байтов
>>> key = bytearray([0x13, 0x00, 0x00, 0x00, 0x08, 0x00])
>>> key
bytearray(b'\x13\x00\x00\x00\x08\x00')
Индексирование получает и устанавливает отдельные байты
>>> 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'
>>>