python和C数据互转
C -> Python
从C返回的地址获得一个int
value = ctypes.c_int.from_address(addr)
得到一个c_int。
再调用c_int.value属性得到python int。
从C返回的地址获得一个struct
比如下面的结构:
class DynamicListType(ctypes.Structure):
_fields_ = [("count", c_int), ("elems", ctypes.POINTER(c_int))]
同样使用from_address获得对象:
DynamicListType.from_address(addr)
返回的就是一个DynamicListType实例,可直接访问其count和elems成员。
从C返回的地址获得一个函数指针
# 这里func_ptr是一个整型地址,用CFUNCTYPE函数对其做强转,可获得一个可执行的函数指针(类型是CFuncPtr),执行该函数,可得到结果
cfunc = CFUNCTYPE(return_type, *arg_types)(func_ptr)
func_res = cfunc(*args)
上述cfunc返回的结果,python框架做过处理,像整型、浮点型、字符串等基本类型都转成了python的基本类型int、float、bytes。
复杂的结构则转成ctypes里定义的类型,比如:
LP_c_char_p_Array_2,代表[char* x 2]* ,我们要用contents获取指针内容,得到[char* x 2],也就是python里的bytes*2
Python -> C
原文地址:https://blog.csdn.net/tlxamulet/article/details/143524878
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!