如何制作字节列表?

时间:2019-05-13 20:44:13

标签: python arrays byte

要打包二进制网络协议的数据,我需要将整数转换为字节列表以供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()函数为我提供了一个整数列表,并且是否有比使用冗长的列表理解转换int更为Python化的方式到整数字节列表到字节列表。

1 个答案:

答案 0 :(得分:2)

.to_bytes是转换为bytes对象的Python方法。我认为您所缺少的是,根据定义,字节对象的元素将是一字节整数

来自docs

  

由于bytes对象是整数序列(类似于元组),所以对于字节对象b,b [0]将是整数,而b [0:1]将是长度为字节的对象1。

您最有可能要做的是使用'B'(无符号字符)格式字符。 See Python docs here

data = 0x123456
packed = struct.pack('BBB', *data.to_bytes(3, 'little'))