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

Python3.4使用struct模块生成指定二进制文件失败求助

解决二进制文件打包匹配指定Hex Dump的问题

我来帮你分析一下问题所在,并且给出对应的解决方案:

首先,我们得先搞懂你提供的Hex Dump格式:默认的hexdump命令会把数据按16位大端分组显示,而你的64位RHEL系统是小端字节序,struct.pack('I', x)会生成小端的4字节无符号整数。这两者的匹配是关键。

你的目标字节序列分析

你需要的最后4字节在Hex Dump中显示为ccf8 0001,对应实际的小端字节序列是0xf8, 0xcc, 0x01, 0x00,把这个字节序列转换成小端无符号整数的话,计算结果是0x0001ccf8 = 118008——这才是你需要打包的数值,而不是你之前尝试的14500。

正确的代码实现

#!/usr/bin/python3.4
import struct

with open('brian', 'wb') as fout:
    # 打包前三个整数,和你之前的逻辑一致(小端字节序)
    fout.write(struct.pack('I', 0))
    fout.write(struct.pack('I', 4))
    fout.write(struct.pack('I', 180))
    # 打包对应dump结果ccf8 0001的整数
    fout.write(struct.pack('I', 118008))

为什么之前的尝试失败?

  1. 打包整数14500:14500的十六进制是0x3839,小端字节序列是0x39, 0x38, 0x00, 0x00,对应的Hex Dump会显示为3839 0000,和你需要的ccf8 0001完全不符。
  2. 打包字符串b'014500':struct.pack('4s', ...)会取字符串前4个字符b'0145',对应的ASCII字节是0x30, 0x31, 0x34, 0x35,Hex Dump会显示为3130 3534,同样不符合要求。

补充说明

如果你的“014500”是用来表示01时45分00秒,那可能是需求中的数值转换规则有误解(比如特殊的编码、时间戳偏移等),但如果只是要严格复现你给出的Hex Dump结果,打包整数118008就可以完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:58:22