ctypesndarray的属性可以与ctypes模块交互,例如,
ndarray.ctypes.data是数组的数据地址,可以将其强制转换为
float*指针,然后将该指针传递给C函数。
import numpy as npfrom cffi import FFIffi = FFI()ffi.cdef("void copy(float *in, float *out, int len);")C = ffi.dlopen("cpre.dll")a = 42*np.ones(16, dtype=np.float32)b = np.zeros_like(a)pa = ffi.cast("float *", a.ctypes.data)pb = ffi.cast("float *", b.ctypes.data)C.copy(pa, pb, len(a))print b对于您的问题3:
我认为ffi数组不提供numpy必要的信息来访问它的内部缓冲区。因此,numpy尝试将其转换为失败的浮点数。
我能想到的最佳解决方案是将其首先转换为列表:
float_in[0:16] = list(arr_in[0:16])



