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

读取二进制数据时struct格式报错,如何指定小端字节序?

解决struct.unpack的字节序格式错误问题

二进制数据规格

  • 1 Byte SF-Major
  • 1 Byte SF-Minor
  • 1 Byte SF-Patch
  • 1 Byte SF-Build
  • 2 Byte build(小端字节序)

错误代码及报错信息

用户编写的读取代码:

format_string = (
    'BBBB'
    '<H'
)

parsed_data: bytes = binary_data[:10]
unpacked_data = struct.unpack(format_string, header_data)

执行时触发错误:

unpacked_data = struct.unpack(format_string, header_data)
struct.error: bad char in struct format

问题原因

Python的struct模块有明确规则:字节序(</>/=等)、对齐方式这类修饰符必须放在格式字符串的最开头,不能插在格式符中间。你把<放在BBBB之后,struct会把它当成无效的格式字符,因此报错。

解决方案

把小端字节序标记<移到格式字符串最前端,按顺序写所有格式符即可,同时注意修正字节截取长度(你的数据总长度是4*1+2=6字节,原代码取前10字节属于多余):

import struct

# 小端字节序开头,后跟4个单字节、1个双字节无符号整数
format_string = '<BBBBH'

# 截取对应长度的二进制数据(6字节)
parsed_data = binary_data[:6]
unpacked_data = struct.unpack(format_string, parsed_data)

这样既满足了build字段的小端字节序要求,又能正确解析所有字段。

内容的提问来源于stack exchange,提问作者Em Ae

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 15:12:07