使用struct.pack时报struct.error: bad char in struct format错误求助
报错原因
你使用的小写k不属于Python struct模块支持的合法格式符,这是触发报错的根本原因,和数值是否做了四舍五入处理没有关联。
struct模块常用的整型格式符对应规则如下:
l(小写L):C语言有符号long类型,标准固定长度为4字节L(大写L):C语言无符号unsigned long类型,标准固定长度为4字节q(小写q):C语言有符号long long类型,标准固定长度为8字节Q(大写Q):C语言无符号unsigned long long类型,标准固定长度为8字节N:C语言size_t类型,仅支持原生字节序,长度随运行平台变化
解决方案
根据你的实际需求选择对应的格式符即可:
- 如果你需要打包8字节无符号长整型,把格式符替换为大写
Q:
import struct num = 1002 res = struct.pack("Q", num)
- 如果你需要打包4字节无符号长整型,替换为大写
L:
import struct num = 1002 res = struct.pack("L", num)
- 如果你需要匹配原生平台的
size_t类型,替换为格式符N:
import struct num = 1002 res = struct.pack("N", num)
额外建议
可以在格式符前增加字节序前缀避免跨平台兼容性问题:
<强制使用小端字节序>强制使用大端字节序=强制使用平台原生字节序
示例:struct.pack("<Q", num) 会固定以小端字节序打包8字节无符号长整型,运行结果不受部署平台影响。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

