首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何制作字节列表?

如何制作字节列表?
EN

Stack Overflow用户
提问于 2019-05-13 20:44:13
回答 1查看 198关注 0票数 1

要为二进制网络协议打包数据,我需要将整数转换为一个字节列表,以便在struct.pack("ccc", myList)中使用。

我发现这不管用:

(使用integer.to_bytes__)

代码语言:javascript
复制
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()创建的。

但这段代码确实有效:

代码语言:javascript
复制
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方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-13 23:04:35

.to_bytes是转换为bytes对象的Pythonic方法。我认为您缺少的是字节对象的元素,从定义上说,是一个字节整数。

来自文档

由于bytes对象是整数序列(类似于元组),对于一个字节对象b,b将是一个整数,而b0:1将是长度为1的字节对象。

最有可能的是,您要做的是使用'B' (无符号字符)格式字符。见这里的Python文档

代码语言:javascript
复制
data = 0x123456
packed = struct.pack('BBB', *data.to_bytes(3, 'little'))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56119641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档