我想将python数组缓冲区的地址传递给另一个应用程序或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数组一样寻址?
如果此地址是实际的内存地址,我可以在C。{/ p>中的memcpy()
函数中使用此地址
答案 0 :(得分:0)
正如the documentation所写,可以将它用作地址。但请注意按照说明使用buffer protocol。
返回一个元组(地址,长度),给出当前的内存地址和 用于保存数组内容的缓冲区元素的长度。 内存缓冲区的大小(以字节为单位)可以计算为 array.buffer_info()1 * array.itemsize。 这偶尔会有用 使用低级(和固有的不安全)I / O接口时 需要内存地址,例如某些ioctl()操作。该 只要数组存在且没有,返回的数字就是有效的 长度变化操作适用于它。
注意从C或C ++编写的代码中使用数组对象时(唯一的 有效利用这些信息的方式),更有意义 使用数组对象支持的缓冲区接口。这个方法是 保持向后兼容性,新的应该避免 码。缓冲区接口记录在Buffer Protocol。
中