【发布时间】:2013-09-24 09:39:16
【问题描述】:
我有一个保存游戏文件,我试图通过使用十六进制偏移读取文件来解析所有字符属性。从纯文本开始,我能够正确提取所有字符串,但我在解析我正在使用的二进制部分时遇到问题。
我很确定我正在读取正确的数据,但是当我解压字符串时,我得到了意外(不正确)的输出
我正在使用的文件是 www.retro-gaming-world.com/SAVE.DAT
import struct
infile = open('SAVE.DAT','rb')
try:
buff = infile.read()
finally:
infile.close
infile.seek(0x00,0)
print "Save Signature: " + infile.read(0x18)
print "Save Version: " + str(struct.unpack('>i',buff[0x18:0x18+4])[0])
infile.seek(0x1C,0)
print "The letter R: " + infile.read(0x01)
infile.seek(0x1D,0)
print "Character Name: " + infile.read(0x20)
infile.seek(0x3D,0)
print "Save Game Name: " + infile.read(0x1E)
print "Save game day: " + str(struct.unpack('>i',buff[0x5B:0x5B+4])[0])
print "Save game month: " + str(struct.unpack('>i',buff[0x5D:0x5D+4])[0])
print "Save game year: " + str(struct.unpack('>i', buff[0x5F:0x5F+4])[0])
我遇到了两个不同的问题,要么返回了错误的数据,要么当我尝试解压缩某些字段时,我收到一个错误,即字符串不够长,我可以阅读更多内容,但日期月份和year 分别只有 2 个字节和 4 个字节并且是整数,我不确定我是否以正确的方式进行处理,我相信我正在获取正确的字段,但认为我在某些地方不正确地解包或处理数据完全。
版本应该返回 0100 天应该返回 21 月份应该返回 09 年份应该返回 2013
我到底在哪里弄错了,有没有其他方法或更好的方法来解析二进制文件中的字段?
【问题讨论】:
-
开始调查;我在最后一行发现了一个错字; sturct--> 结构
-
我修正了代码中的错字,但在理解错误方面没有取得任何进展,导致我的字段输出不正确
标签: python struct binary unpack