这是一个方法...
类变量Test._fields_
定义属性及其 C 类型。通过分配字段生成的类属性包含有关该属性的偏移量的信息,例如:
>>> Test.a
<Field type=c_long, ofs=0, size=4>
>>> Test.b
<Field type=c_double, ofs=8, size=8>
>>> Test.c
<Field type=c_char_Array_10, ofs=16, size=10>
Run Code Online (Sandbox Code Playgroud)
对于每种类型,该from_buffer()
方法使用与现有类型相同的数据缓冲区构建 C 类型。该结构的实例实现了访问其数据所需的缓冲区 API,因此如果您知道结构元素数据的偏移量,则可以生成ctypes
引用相同数据的类型,并创建指向它的指针。
from ctypes import *
class Test(Structure):
_fields_ = [('a',c_int),
('b',c_double),
('c',c_char * 10)]
x = Test(1,2.5,b'abc')
for field,ftype in Test._fields_:
# Look up each attribute in the class, and get its offset.
ofs = getattr(Test,field).offset
# Create a pointer to the same field type using the same data.
p = pointer(ftype.from_buffer(x,ofs))
print(p,p.contents)
Run Code Online (Sandbox Code Playgroud)
输出:
<__main__.LP_c_long object at 0x000001932DE0EEC8> c_long(1)
<__main__.LP_c_double object at 0x000001932DE0ECC8> c_double(2.5)
<__main__.LP_c_char_Array_10 object at 0x000001932DE0EDC8> <__main__.c_char_Array_10 object at 0x000001932DE0ECC8>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2871 次 |
最近记录: |