我對如何從下面描述的文件讀取二進制數據感到困惑。描述如何創建此數據的文檔聲明如下:讀取二進制數據(字節順序)
有一個「開始日誌文件記錄」,並且格式是明文消息以ctrl-Z'0x1a'結尾(結束DOS/Windows文件),ctrl-D'0x04'(Unix的文件結束)和空'0x00'(按照設計文檔的順序)。
然後,有值0×12345678(4個字節長,以允許任意的解碼器來確定字節存儲順序)
之後住數據的肉。
我的代碼來讀取這個文件:
f = open(filename, 'rb')
while True:
byte = f.read(1)
if byte.encode('hex') == '1a': # ctrl-z
if s[i+1].encode('hex') == '04': # ctrl-D
if s[i+2].encode('hex') == '00': # null
print s[i:i+8].encode('hex')
break
打印>>1a04007856341200
正如你所看到的,0x12345678
隱藏在那裏。我從我的研究中瞭解到,這意味着數據存儲爲「小端」。現在我的工具(我覺得)讓事情變得比我需要的更困難。例如,下面的代碼挑出年(YYYY)文件的創建
i = year_location_in_file # just a pointer
created_year = struct.unpack('<cc', s[i:i+2])
print 'created_year as hex:', created_year
created_year = int(''.join([e for e in created_year][::-1]).encode('hex'), 16)
print 'created year as int:', created_year
打印:
>> created_year as hex: ('\xdd', '\x07')
>> created year as int: 2013
我花了顯著時間去了解所有的提出的問題和閱讀我可能會Google的一切。我希望答案能夠幫助我以及任何努力瞭解二進制文件中字節順序的人。謝謝你的社區。
編輯:使用print(repr(open(filename, 'rb').read(600)))
給
....sometext\xd4\xb4\x97\x1a\x04\x00xV4\x12\x00U\x01\.....
- B
不要提前致謝,我想單獨*'?'*更多,要知道要關注什麼。我甚至嘗試過Ctrl + F和*「問題」*。無法找到任何。 – luk32
到底應該代表什麼是二進制的東西?你顯示13個字節(最後有一個額外的反斜槓),但你不會說他們應該如何解釋。 – Blckknght
@Blckknght這是上述印刷聲明的結果。我只是表明,我正在尋找的價值(0x12345678)在那裏作爲xV4 \ x12 \ –