[英]How does SWIG wrap buffer(char array) and pointer from C to Python?
[英]Create Python buffer object from C++ pointer using SWIG?
我想從C ++指針創建一個Python緩沖區對象(可寫或不可寫),以便可以將其傳遞給numpy.frombuffer
函數。 有人可以讓我知道怎么做嗎?
這是我的示例SWIG包裝的C ++函數,該函數返回一個指針:
uint8_t* some_function() {return new uint8_t[200];}
SWIG包裝完之后,我按照這篇文章在python中創建了一個緩沖區對象:
x = some_function()
b = buffer_frompointer(x)
z = numpy.frombuffer(b, dtype=numpy.uint8)
最后一條語句返回錯誤,指出未找到__buffer__
屬性。 我猜這是因為這里的變量b
實際上不是python的緩沖區對象。 那我該怎么辦?
ps。 創建numpy數組時,我不需要內存的其他副本。
ps。 現在讓我們不必擔心內存泄漏問題。
更新:
我仍然對這個問題的解決方案感興趣,但是如果沒有人回答,我將針對另一個問題提出解決方案,盡管由於使用了棄用的接口,因此不建議使用該解決方案。
import ctypes, numpy
bptr = int(b.cast())
barray = ctypes.c_byte*200
barray = barray.from_address(bptr)
z = numpy.ctypeslib.as_array(barray)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.