簡體   English   中英

使用SWIG從C ++指針創建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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM