1
我最近重新回到了編程中,並決定將其作爲一個項目讓我走向和激勵我將編寫一個字符編輯器,用於後果2.我遇到的問題是在前幾個字符串之後,我似乎無法使用文件偏移量或結構來提取我需要的數據。Python - 用偏移量和結構讀取二進制文件
這就是我正在做的。 我一起工作的文件是www.retro-gaming-world.com/SAVE.DAT
import struct
savefile = open('SAVE.DAT', 'rb')
try:
test = savefile.read()
finally:
savefile.close()
print 'Header: ' + test[0x00:0x18] # returns the save files header description "'FALLOUT SAVE FILE '"
print "Character Name: " + test[0x1D:0x20+4] Returns the characters name "f1nk"
print "Save game name: " + test[0x3D:0x1E+4] # isn't returning the save name "church" like expected
print "Experience: " + str(struct.unpack('>h', test[0x08:0x04])[0]) # is expected to return the current experience but gives the follosing error
輸出:
Header: FALLOUT SAVE FILE
Character Name: f1nk
Save game name:
Traceback (most recent call last):
File "test", line 11, in <module>
print "Experience: " + str(struct.unpack('>h', test[0x08:0x04])[0])
struct.error: unpack requires a string argument of length 2
我已經證實了偏移,但它只是沒有返回如預期的那樣。
我的理解方式是測試[offset:bytestoread],我對它的測試生鏽[offsetstart:offsetend]? – user2806298
感謝你指出了我搞砸了我的切片。測試[0x08:0x08 + 20] 謝謝。 – user2806298
@ user2806298請記住,「結束」索引不是結果的一部分,所以s [8:12]包括s [8],s [9],s [10],s [11],但不是s [12]。另一種想法是s [start:start + length],對於step是1的常見情況。 –