作者timTan (用口头禅区分年记)
看板Python
标题Re: [问题] struct pack怎麽包??
时间Tue Jul 19 16:30:11 2011
※ 引述《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)
1F:推 final01:我是要将每个四个byte包成1个integer所以要用I阿,你这样写 07/19 19:40
2F:→ final01:包完後,长度还是4,我是要包完长度变1 07/19 19:42
3F:→ final01:应用的话~就是让人一次可取4byte,先帮他包好 07/19 19:44
4F:→ final01:我list每个索引会放1 byte的资料 07/19 19:46