Python struct.pack报错's'参数必须为bytes对象的原因与解决方法
报错原因
你参考的示例是基于Python 2环境编写的:Python 2中普通字符串默认就是字节串,没有单独的bytes类型区分;但Python 3严格区分了文本类型(str,存储Unicode字符)和字节类型(bytes,存储原始字节序列)。struct模块的格式符s用来处理字节串,对应C语言的字符数组,要求传入的参数必须是bytes对象。你代码中传入的'ab'是Python 3的str类型,不符合参数类型要求,因此触发报错。
修复方案
把传给s格式符的字符串转成bytes类型即可,最简便的写法是在字符串字面量前加b前缀,直接定义bytes字面量:
import struct import binascii values = (1, b'ab', 2.7) s = struct.Struct('I 2s f') packed_data = s.pack(*values)
如果需要打包的内容是动态生成的字符串变量,可以通过encode()方法按指定编码转成bytes,例如:
str_val = 'ab' values = (1, str_val.encode('utf-8'), 2.7) packed_data = s.pack(*values)
内容的提问来源于stack exchange,提问作者zell
相关产品推荐
相关产品推荐

