使用ctypes将byte numpy数组传递给C函数

时间:2018-04-25 15:49:31

标签: python python-3.x ctypes

我想使用C将byte numpy数组传递给ctypes函数。 C函数需要void *mem_address,所以我想将其传递给以下内容:

lst = np.random.choice(np.array(range(0, 100), dtype=np.int), size=(100, 5))
lst = np.asarray(lst).tobytes()

# Pass
lst.ctypes.data_as(ctypes.c_void_p)

这会导致错误AttributeError: 'bytes' object has no attribute 'ctypes',这意味着ctypes无法处理numpy。有解决方法吗?

2 个答案:

答案 0 :(得分:1)

lst现在是一个python bytes对象,而不是numpy数组。这是.tobytes()的作用。

为什么不

lst = np.random.choice(np.array(range(0, 100), dtype=np.int), size=(100, 5))
lst.ctypes.data_as(ctypes.c_void_p)

当c指针为32位或64位时,我甚至不确定为什么要尝试转换为8位的字节。

答案 1 :(得分:1)

lst = np.asarray(lst).tobytes()生成一个纯字节对象([Python 3]: class bytes([source[, encoding[, errors]]]),该对象不由 ctypes 处理。

另一方面([SciPy]: numpy.ndarray)的原始 lst 对象是。因此,删除上面的代码行将修复错误。