python解包的概念 如何以程式設計方式為解包結構?

2021-10-21 07:38:26 字數 1921 閱讀 8823

我試圖用python讀取和解析乙個二進位制檔案。在

問題是檔案中的資料可以是little-endian或big-endian格式,也可以是32位或64位的值。在檔案頭中有幾個位元組指定資料格式和大小。假設我已經讀過這些,並且知道格式和大小,然後嘗試構造乙個格式字串,如下所示:if (bitorder == 1): # little-endian format

strdata = '

elif (bitorder == 2): # bit-endian format

strdata = '>'

if (datasize == 1): # 32-bit data

strlen = 'l'

elif (datasize == 2):

strlen = 'q'

strformat = strdata + strlen

struct.unpack(strformat, buf)

當我這樣做時,我得到了錯誤:"struct.error: unpack requires a string argument of length 2",但是如果我寫struct.unpack('

在互動式shell上,如果我執行type(strformat)我得到結果,當我執行len(strformat)時,我得到2的結果。在

因此,作為python的新手,我有以下幾個問題:str與字串不一樣嗎?如果沒有,我如何在兩者之間轉換?

如何正確構造用於unpack函式的格式字串?

------編輯------

處理意見:由於其他專案的限制,我現在使用python-2.7。

我試圖避免發布我的**(它有幾百行長),但是這裡有乙個interact python(從emacs內部執行,如果有關係的話),它顯示了我所經歷的行為:python 2.7.5 (default, jun 17 2014, 18:11:42)

[gcc 4.8.2 20140120 (red hat 4.8.2-16)] on linux2

>>> import array

>>> import struct

>>> header = array.array('b',[0x7f, 0x45, 0x4c, 0x46, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,0x3e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x11, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x40, 0x00, 0x38, 0x00, 0x09, 0x00, 0x40, 0x00, 0x1e, 0x00, 0x1b, 0x00])

>>> entry = header[24:32]

>>> phoff = header[32:40]

>>> shoff = header[40:48]

>>> strdata = '

>>> strlen = 'h'

>>> strformat = strdata + strlen

>>> print strformat

>>> type(strformat)

>>> len(strformat)

>>> temp = struct.unpack(strformat, entry)

traceback (most recent call last):

file "", line 1, in

struct.error: unpack requires a string argument of length 2

修復了原始**中的型別。

Python中的解包

a,b,c 1 2 3 print a,b,c 1 2 3 a,b,c print a,b,c 1 2 3 2.python中交換變數值實際也是解包的過程。a,b 1,2 a,b b,a print a,b 2 1 a,b,c 1,2,3,4 print a,b,c 1 2 3,4 在函式呼叫時,你...

python中的解包操作

在看別人寫的python 的時候,有時候會看到在變數前面加上乙個 或者是 上網找了一下相關的資料發現這些星號原來是python中的解包操作,相當於將乙個容器中的元素取出來然後分配給不同的變數,下面是我看別人寫的部落格自己的一些理解 1 乙個星號解包 解包可以使用在多個變數賦值或者是函式呼叫中,並且任...

如何以程式的方式載入adobe reader閱讀器

原問題來自於csdn問答頻道,更多解決方案見 問題描述 file file new file sdcard sample.pdf packagemanager packagemanager getpackagemanager intent testintent new intent intent.a...