You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 05:45:07