我有以下代码将字典打包成结构...
>>> this = bytearray(2)
>>> this[0] = 100
>>> this[1] = 150
>>> bool = True
>>> str = 'new'
>>> dct = {'bt_arr': this, 'string':str, 'boolean': bool}
>>> print dct
{'bt_arr': bytearray(b'd\x96'), 'boolean': True, 'string': 'new'}
val = struct.pack ('!' + 'B' +'B' + 'B'*3 + '?', dct['bt_arr'][0], dct['bt_arr'][1],dct['string'][0:3], dct['boolean'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
struct.error: pack requires exactly 6 arguments
你可以告诉我上面代码中我做错了什么......
我想以类似的方式打开它......
答案 0 :(得分:2)
感谢martineau
和eumiro
我得到了这个解决方案,如果有更好的解决方案,请告诉我
val = struct.pack ('!' + 'B' +'B' + 'c'*3 + '?', *(tuple(dct['bt_arr'][0:2])+ tuple(dct['string'][0:3]) + (dct['boolean'],)))
答案 1 :(得分:0)
此处缺少括号有问题:
dct['bt_arr'[1]
修改强>
val = struct.pack ('!' + 'B' +'B' + 'B'*3 + '?', dct['bt_arr'][0], dct['bt_arr'][1],dct['string'][0:3], dct['boolean'])
这种格式'!' + 'B' +'B' + 'B'*3 + '?'
想要存储五个元素,这就是函数需要六个参数(包括格式)的原因。你只提供四个。
<强> EDIT2:强>
val = struct.pack('!' + 'B' +'B' + 'B'*3 + '?', *(list(dct['bt_arr']) + list(dct['string'][0:3]) + [dct['boolean']]))