2016-11-20 59 views
0

欲一個python陣列緩衝區的地址傳遞給另一個應用程序或c函數,蟒陣列地址通至C

buf = array("d", range(10)) 
addr, count = buf.buffer_info() 
print "Address of buffer ", addr 

輸出:

Address of buffer 0x28a3ab0 

這是地址的實際存儲器buf數組的第一個元素的地址?

這是類似的地址,如C,第一個元素的地址buf

如果不是我怎麼能在python中聲明一個緩衝區,並將它的地址傳遞給c函數,並使用它的值和C的數組尋址?

如果該地址是實際內存地址我可以在memcpy()功能使用這個地址C.

回答

0

由於the documentation寫了,沒關係把它當作一個地址。但請考慮按照NOTE使用buffer protocol

返回的元組(地址,長度)給出當前存儲器地址和 在用於保持數組的內容緩衝區的元件的長度。 內存緩衝區的大小(字節)可以計算爲 array.buffer_info()1 * array.itemsize。 當使用需要存儲器地址的低級(和固有不安全)I/O接口 (如某些ioctl()操作)時,偶爾會有用 。只要數組存在並且不對其應用長度更改操作, 返回的數字就是有效的。

當使用從用C或C代碼陣列對象++(唯一 方式有效地利用此信息),它更有意義 使用由數組對象所支持的緩衝器接口。這種方法爲 保持向後兼容性,應該避免在新的 代碼。緩衝接口記錄在Buffer Protocol中。