我想使用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。有解决方法吗?
答案 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 对象是。因此,删除上面的代码行将修复错误。