从C++;使用SWIG的指针? < >我想从C++指针创建一个Python缓冲对象(可写或不写),这样它就可以传递到 NoMpy.FasBuffs函数。有人能告诉我怎么做吗 这是我的例子,用Sigg包的C++函数返回指针: uint8_t* some_function() {return new uint8_t[200];}
SWIG包装之后,我使用python创建了一个缓冲区对象:从C++;使用SWIG的指针? < >我想从C++指针创建一个Python缓冲对象(可写或不写),这样它就可以传递到 NoMpy.FasBuffs函数。有人能告诉我怎么做吗 这是我的例子,用Sigg包的C++函数返回指针: uint8_t* some_function() {return new uint8_t[200];},python,numpy,swig,Python,Numpy,Swig,SWIG包装之后,我使用python创建了一个缓冲区对象: x = some_function() b = buffer_frompointer(x) z = numpy.frombuffer(b, dtype=numpy.uint8) 最后一条语句返回一个错误,表示未找到\uuuu buffer\uuuu属性。我猜这是因为变量b在python意义上并不是真正的缓冲区对象。那我该怎么办 另外,在创建numpy阵列时,我不需要额外的内存副本 另外,我们暂时不要担心内存泄漏问题 更新: 我仍然对这
x = some_function()
b = buffer_frompointer(x)
z = numpy.frombuffer(b, dtype=numpy.uint8)
最后一条语句返回一个错误,表示未找到\uuuu buffer\uuuu
属性。我猜这是因为变量b
在python意义上并不是真正的缓冲区对象。那我该怎么办
另外,在创建numpy阵列时,我不需要额外的内存副本
另外,我们暂时不要担心内存泄漏问题
更新:
我仍然对这个问题的解决方案感兴趣,但如果没有人回答,我将采用我提出的解决方案,尽管由于使用了不推荐使用的接口,该解决方案不是首选方案。请不要发布只包含代码的答案。继续解释你的解决方案你是如何解决OP的问题的。
import ctypes, numpy
bptr = int(b.cast())
barray = ctypes.c_byte*200
barray = barray.from_address(bptr)
z = numpy.ctypeslib.as_array(barray)