看板 Python 關於我們 聯絡資訊
※ 引述《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)
final01:我是要將每個四個byte包成1個integer所以要用I阿,你這樣寫 07/19 19:40
final01:包完後,長度還是4,我是要包完長度變1 07/19 19:42
final01:應用的話~就是讓人一次可取4byte,先幫他包好 07/19 19:44
final01:我list每個索引會放1 byte的資料 07/19 19:46