I have a ctypes structure.
class S1 (ctypes.Structure):
_fields_ = [
(\'A\', ctypes.c_uint16 * 10),
(\'B\', ctypes.c_uint32),
(\'C\',
A little bit more general purpose to handle double arrays, and arrays of structures, and bitfields.
def getdict(struct):
result = {}
#print struct
def get_value(value):
if (type(value) not in [int, long, float, bool]) and not bool(value):
# it's a null pointer
value = None
elif hasattr(value, "_length_") and hasattr(value, "_type_"):
# Probably an array
#print value
value = get_array(value)
elif hasattr(value, "_fields_"):
# Probably another struct
value = getdict(value)
return value
def get_array(array):
ar = []
for value in array:
value = get_value(value)
ar.append(value)
return ar
for f in struct._fields_:
field = f[0]
value = getattr(struct, field)
# if the type is not a primitive and it evaluates to False ...
value = get_value(value)
result[field] = value
return result