没有与字典初始化结构的方式:Python的CFFI转换结构,字典
fooData= {'y': 1, 'x': 2}
fooStruct = ffi.new("foo_t*", fooData)
fooBuffer = ffi.buffer(fooStruct)
有一些现成的功能来执行转换?
fooStruct = ffi.new("foo_t*")
(ffi.buffer(fooStruct))[:] = fooBuffer
fooData= convert_to_python(fooStruct[0])
我是否必须自己使用ffi.typeof(“foo_t”)。字段?
我想出迄今代码:
def __convert_struct_field(s, fields):
for field,fieldtype in fields:
if fieldtype.type.kind == 'primitive':
yield (field,getattr(s, field))
else:
yield (field, convert_to_python(getattr(s, field)))
def convert_to_python(s):
type=ffi.typeof(s)
if type.kind == 'struct':
return dict(__convert_struct_field(s, type.fields))
elif type.kind == 'array':
if type.item.kind == 'primitive':
return [ s[i] for i in range(type.length) ]
else:
return [ convert_to_python(s[i]) for i in range(type.length) ]
elif type.kind == 'primitive':
return int(s)
有一个更快的方法?
没有内置的方式,没有。通常不需要:直接使用cdata对象,而不必先将其转换为字典和列表。 –
@ArminRigo我需要将其转换为JSON。 – Arpegius