我試圖用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...