2013-03-22 117 views
4

我有一些結構,我想從二進制文件讀取。我嘗試使用Python的結構。 這裏閱讀的字符串:Python結構大小不匹配

.... = struct.unpack('I36s36s72sQQIIH4s36s4s20s', datab.read(238)) 

它工作正常。我通過打印值來查看它。

現在我想將「4s」更改爲「I」,因爲它應該是。當我改變字符串:

.... = struct.unpack('I36s36s72sQQIIHI36s4s20s', datab.read(238)) 

(第一變 「4S」 到 「I」),我得到錯誤:

struct.error: unpack requires a bytes object of length 240 

由於文檔說, 「我」 的大小爲4個字節,爲什麼我的變化導致錯誤?

+0

也許假前綴或後綴的作品? (x00) – 2013-03-22 14:35:28

回答

5

這與校準有關。 I在四字節邊界上對齊,需要兩個字節的填充。另一方面,4s沒有這樣的要求。

有關如何關閉此功能的信息,請參見7.3.2.1. Byte Order, Size, and Alignment

+0

謝謝!其作品! – dtoch 2013-03-22 14:46:12