提问人:Mika 提问时间:7/21/2023 更新时间:7/21/2023 访问量:49
如何将带有嵌套结构和数组的 Ctypes 结构转换为 python dict
How to convert Ctypes structure with nested structures and arrays to python dict
问:
我有一个结构(由 Mark Tolonen 设计,非常感谢他!(我决定不在这里重写它,以避免与该帖子的代码重复)。这种结构的特征是,结构可以包括另一个结构和数组,甚至数组与结构。
我试图创建一个函数,它将此结构转换为python dict。这是尝试:
def _process_ctypes(self, ctypes_obj):
if isinstance(ctypes_obj, ctypes.Structure):
data_dict = {}
for field_name, field_type in ctypes_obj.get_fields():
field_value = getattr(ctypes_obj, field_name)
if isinstance(field_value, (ctypes.Structure, ctypes.Array)):
data_dict[field_name] = self._process_ctypes(field_value)
else:
data_dict[field_name] = field_value
return data_dict
elif isinstance(ctypes_obj, ctypes.Array):
data_list = []
for element in ctypes_obj:
if isinstance(element, (ctypes.Structure, ctypes.Array)):
data_list.append(self._process_ctypes(element))
else:
data_list.append(element)
return data_list
但是,恕我直言,它看起来有点丑陋复杂。而且不可能将一些数据添加到最终输出中,只能在函数外部添加。
你有没有想过如何简化和重构这个函数,它将递归地遍历整个C结构,并收集所有嵌套结构和值数组的字典?输入 - 始终为 ctypes。结构,输出 - 始终 python.dictionary。
此外,将每个数组也转换为字典会很棒,只需使用一些特定的字符串作为键即可。
答: 暂无答案
评论