Re: [問題] struct pack怎麼包??
※ 引述《final01 (牛頓運動定律)》之銘言:
: 各位大大你們好
: 我有個問題是我用struct pack 包二進位檔案時的問題
: def functionx(test):
: test = [1,2,3,4]
: a = struct.pack('b'*len(test),*test)
: b = struct.unpack('I'*(len(a)/4), a)
: print len(a)
: print b
: 我想用pack 將list的內容四個byte包成一個integer
: 以上面的範例來講是可以執行的
: 但我將test改成
: test = [1,2,3,4,5]
: 就不行了,我發現應該是因為不是四的倍數,所以不讓我包
: 難道我真的要自己將test補到四的倍數嗎??
: 感謝!!
當你的 test 是 [ 1,2,3,4 ,5 ] 的時候
所有的東西都不合程式的預期吧。
以下是你的函式的執行結果。
>>> functionx( [1,2,3,4,5] )
Traceback (most recent call last):
File "<pyshell#9>", line 1, in -toplevel-
functionx( [1,2,3,4,5] )
File "/home/tim/test.py", line 6, in functionx
b = struct.unpack('I'*(len(a)/4), a)
error: unpack str size does not match format
size 不合。
你的 a 的長度不是 4, 是五啊!!
五個byte 的東西是不合 'I' 的 format,
我覺得要改成這樣
import struct
def functionx(test ):
#test = [1,2,3,4]
a = struct.pack('b'*len(test),*test)
b = struct.unpack('b'*len(a), a)
print a
print len(a)
print b
才可以正確還原回原來的東西。
--
還是你有什麼特殊的應用? 有一定要選 I 的理由嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.211.32.194
※ 編輯: timTan 來自: 218.211.32.194 (07/19 16:39)
※ 編輯: timTan 來自: 218.211.32.194 (07/19 16:40)
推
07/19 19:40, , 1F
07/19 19:40, 1F
→
07/19 19:42, , 2F
07/19 19:42, 2F
→
07/19 19:44, , 3F
07/19 19:44, 3F
→
07/19 19:46, , 4F
07/19 19:46, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章
-9
18