2016-06-09 72 views
1

所以我正在看我寫的代碼可能多達4年前,我知道它在當時正確運行。但是現在我正在試圖在不同的計算機上運行它,而不是在幾年前我寫它的時候,而現在我得到了一個錯誤。 (今天在Windows 10和Ubuntu上試用過)Python結構格式錯誤

我正在使用Python 2.7,因爲我也是。我正在使用Struct庫從文件中解壓C類型,特別是我試圖解壓4個字節長的值。 這裏是2.7結構庫的文檔。 https://docs.python.org/2/library/struct.html

如果向下滾動到「格式字符」部分,您可以看到一個C類型的表格。

這裏是我的代碼:

bps = int(unpack('L', fmap[o+10:o+14])[0]) 

這裏是我的錯誤。

error: unpack requires a string argument of length 8 

令我迷惑的部分是「長度8」部分。如果我將C類型更改爲「I」,則代碼執行正常。但是文檔似乎很清楚,「L」也是4字節,並且它在過去有效。我想我可以使用「我」類型用於我的目的,但我很好奇,如果有人看到這一點。

回答

3

標準大小的L爲4個字節,但如果你是明文規定只用於有關的字節順序由開始的格式字符串><!,或=使用。否則,將使用機器的平臺相關本機大小。 (在這種情況下,8字節)。

+0

啊,非常有趣。我只是在'L'前添加'<'來測試它,它非常有用,所以非常感謝。當我在幾年前編寫和測試時,它會在Windows XP系統上運行,所以這很有意義。 – reallcoder