最近研究人脸识别,需要用python调用so动态库,涉及到c/c++中的指针字符串转Python的bytes对象的问题。
按照ctypes的文档,直观方式是先创建对应的类型数组,再将指针取地址一一赋值:
from ctypes import *
p=(c_char * 10)()
for i in range(10):
p[i] = i
b=bytes(bytearray(p))
print(b)
from ctypes import *
p=(c_char * 10)()
for i in range(10):
p[i] = i
b=bytes(bytearray(p))
print(b)
搜寻了各种资料,都未能找到更好的。。。直到ctypes.string_at
_string_at = PYFUNCTYPE(py_object, c_void_p, c_int)(_string_at_addr)
def string_at(ptr, size=-1):
"""string_at(addr[, size]) -> string
Return the string at addr."""
return _string_at(ptr, size)
_string_at = PYFUNCTYPE(py_object, c_void_p, c_int)(_string_at_addr)
def string_at(ptr, size=-1):
"""strin