<p>老了,但下面是我所做的一个例子:</p>
<pre><code>class GameRecordParser:
def __init__(self, filename):
self.filename = filename
f = open(filename, 'rb')
# Get header size
header_size = struct.unpack('<I', f.read(4))[0]
sub = struct.unpack('<I', f.read(4))[0]
if sub != 0 and sub < os.stat(filename).st_size:
f.seek(4)
self.header_start = 4
else:
self.header_start = 8
# Get and decompress header
header = f.read(header_size - self.header_start)
self.header_data = zlib.decompress(header, -zlib.MAX_WBITS)
# Get body
self.body = f.read()
f.close()
# Get players data
sep = b'\x04\x00\x00\x00Gaia'
pos = self.header_data.find(sep) + len(sep)
players = []
for k in range(0, 8):
id = struct.unpack('<I', self.header_data[pos:pos+4])[0]
pos += 4
type = struct.unpack('<I', self.header_data[pos:pos+4])[0]
pos += 4
name_size = struct.unpack('<I', self.header_data[pos:pos+4])[0]
pos += 4
name = self.header_data[pos:pos+name_size].decode('utf-8')
pos += name_size
if id < 9:
players.append(Player(id, type, name))
</code></pre>
<p>希望它能帮助未来的程序员:)</p>
<p>顺便说一句,我正打算写一本这样的图书馆。在</p>