簡體   English   中英

使用struct在python3.6中讀取結構化二進制數據

[英]reading structured binary data in python3.6 using struct

我確實嘗試過以多種方式尋找這種疑問,但也許是因為我從不使用二進制文件,直到我不知道搜索相似內容的關鍵字可以幫助我什么時候。 這就是為什么我在這里問。

所以,我有一個文件:

path = 'myPath/file.pd0'
in_file = open(path, "rb")
read_file = in_file.read()
type(read_file) 

當我嘗試檢查read_file中的內容時,我得到了:

b'\x7f\x7f\xcc\x05\x00\x0f$\x00`\x00\xa2\x00$\x02\xe6\x02\xa8\x03\xd0\x032\x04d\x04\x96\x04\xa6\x04\xe0\x04'

read_file的類型為字節。 當我嘗試使用struct時,因為它是函數,人們建議我得到以下錯誤:

import struct
struct.unpack('hhl', read_file[0:30])

error: unpack requires a buffer of 16 bytes

無論我得到什么解壓縮,都需要一個n字節的緩沖區。

我嘗試讀取的文件結構定義如下:

標題(6個字節+ [2 x數據類型數])

固定的領先者數據(60字節)

可變領導者數據(66個字節)

相關幅度(每個深度細胞2個字節+ 4個字節)

知道如何使用struct或類似python的方法開始讀取這些字節嗎?

謝謝

unpack()期望字節是其第一個參數描述的格式的確切長度。 格式字符串'hhl'描述了16個字節的數據(在您的計算機上-參見下文),因此您必須傳遞16個字節的字符串。如果只想解析部分字節,則可以執行以下操作:

fmt = 'hhl'
size = struct.calcsize(fmt)
struct.unpack(fmt, data[:size])

另外,您的格式字符串沒有字節順序,大小和對齊方式說明符 默認情況下假定為“本機”。 這意味着您的代碼是與系統有關的,這可能不是解析文件格式所需要的。 您可能需要為文件的不同部分使用不同的對齊方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM