要为二进制网络协议打包数据,我需要将整数转换为一个字节列表,以便在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方法。
发布于 2019-05-13 23:04:35
.to_bytes是转换为bytes对象的Pythonic方法。我认为您缺少的是字节对象的元素,从定义上说,是一个字节整数。
来自文档
由于
bytes对象是整数序列(类似于元组),对于一个字节对象b,b将是一个整数,而b0:1将是长度为1的字节对象。
最有可能的是,您要做的是使用'B' (无符号字符)格式字符。见这里的Python文档
data = 0x123456
packed = struct.pack('BBB', *data.to_bytes(3, 'little'))https://stackoverflow.com/questions/56119641
复制相似问题