如何将字典打包成结构体以便存储到文件中并后续解包
我有以下代码,用来把字典打包成一个结构体...
>>> 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
你能告诉我上面的代码哪里出错了吗?...
我想用类似的方式把它解包...
2 个回答
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 + '?'
想要存储五个元素,所以这个函数需要六个参数(包括格式在内)。可是你只提供了四个。
编辑2:
val = struct.pack('!' + 'B' +'B' + 'B'*3 + '?', *(list(dct['bt_arr']) + list(dct['string'][0:3]) + [dct['boolean']]))
2
感谢 martineau
和 eumiro
的帮助,我找到了这个解决方案。如果你们有更好的办法,请告诉我。
val = struct.pack ('!' + 'B' +'B' + 'c'*3 + '?', *(tuple(dct['bt_arr'][0:2])+ tuple(dct['string'][0:3]) + (dct['boolean'],)))