Python ctypes结构不断转换其字段

时间:2017-07-26 07:50:03

标签: python python-2.7 python-3.x ctypes

我运行了以下代码:

from ctypes import * 

class InnerStructure(Structure):
    pass

InnerStructure._fields_ = [
    ('d', c_ulong),
]

class ComplexStructure(Structure):
    pass

ComplexStructure._fields_ = [
    ('a', InnerStructure * 2),
    ('b', c_ushort * 2 * 2),
    ('c', c_ulong),
]

input_structure = ComplexStructure()

print(type(input_structure.a))
print(type(input_structure.a[0]))
print(type(input_structure.a[0].d))
print(type(input_structure.b))
print(type(input_structure.b[0]))
print(type(input_structure.b[0][0]))
print(type(input_structure.c))
print(type(c_ushort(1)))
print(type(c_long(1)))

以及我期望的是input_structure.a[0].d的类型是c_ulong,但我获得的内容看起来如下:

<class 'struct_utils_tests.InnerStructure_Array_2'>
<class 'struct_utils_tests.InnerStructure'>
<type 'long'>
<class 'struct_utils_tests.c_ushort_Array_2_Array_2'>
<class 'struct_utils_tests.c_ushort_Array_2'>
<type 'int'>
<type 'long'>
<class 'ctypes.c_ushort'>
<class 'ctypes.c_long'>

这是一个严重的问题,因为我无法强制任何结构的成员为c_*类型,因此我不能获取结构成员的地址(函数地址仅适用于ctypes类型)。这是预期的行为还是应该以不同的方式写出这些结构的定义?

提前致谢!

0 个答案:

没有答案