Чтобы упаковать данные для двоичного сетевого протокола, мне нужно преобразовать целое число в список байтов для использования в struct.pack("ccc", myList)
Я обнаружил, что это не работает:
(используя integer.to_bytes
)
myData = 0x123456
packed = struct.pack("ccc", *list(myData.to_bytes(3, byteorder='little')))
Исключение составляет char format requires a bytes object of length 1
, поскольку список представляет собой список <class 'int'>
, даже если он был создан .to_bytes()
Но этот код работает:
myData = 0x123456
packed = struct.pack("ccc", *[bytes([x]) for x in myData.to_bytes(3, byteorder='little')])
# This uses a list-comprehension to convert myData to a list of bytes, instead of a list of integers.
Я пытаюсь понять , почему функция .to_bytes()
дала мне список целых чисел, и если есть более Pythonic способчем использование длинного понимания списка для преобразования int в список целых байтов в список байтов.