Re: [問題] struct pack怎麼包??

看板Python作者 (用口頭禪區分年記)時間14年前 (2011/07/19 16:30), 編輯推噓1(103)
留言4則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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
我是要將每個四個byte包成1個integer所以要用I阿,你這樣寫
07/19 19:40, 1F

07/19 19:42, , 2F
包完後,長度還是4,我是要包完長度變1
07/19 19:42, 2F

07/19 19:44, , 3F
應用的話~就是讓人一次可取4byte,先幫他包好
07/19 19:44, 3F

07/19 19:46, , 4F
我list每個索引會放1 byte的資料
07/19 19:46, 4F
文章代碼(AID): #1E9K2M4a (Python)
討論串 (同標題文章)
文章代碼(AID): #1E9K2M4a (Python)