如何将字典打包成结构体以便存储到文件中并后续解包

2 投票
2 回答
3600 浏览
提问于 2025-04-16 13:43

我有以下代码,用来把字典打包成一个结构体...

>>> 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

感谢 martineaueumiro 的帮助,我找到了这个解决方案。如果你们有更好的办法,请告诉我。

val = struct.pack ('!' + 'B' +'B' + 'c'*3 + '?', *(tuple(dct['bt_arr'][0:2])+ tuple(dct['string'][0:3]) + (dct['boolean'],)))

撰写回答