正在写入新的Python缓冲区接口
Writing to new Python buffer interface
我已经在C++中实现了新的python缓冲区接口,如下所示:
https://docs.python.org/2/c-api/buffer.html
我已经实现了我的Py_buffer结构并填充了它:
template<typename T>
static int getbuffer(PyObject *obj, Py_buffer *view, int flags)
{
flags;
static const Py_ssize_t suboffsets[1] = { 0};
view->buf = (void*)(_Cast<T>(obj)->getbuffer());
view->obj = NULL;
view->len = _Cast<T>(obj)->getbuffersize();
view->itemsize = 1;
view->readonly = _Cast<T>(obj)->getreadonly();
view->ndim = 0;
view->format = NULL;
view->shape = NULL;
view->strides = NULL;
view->suboffsets = NULL;
view->internal = NULL;
return 0;
}
我正在用Python创建我的Python缓冲区类,并将其交给C++。我得到了一个pyObject和我的Py_Buffer所以现在我的问题是,我应该如何在C++中编写和调整这个pyBuffer我可以直接访问指针和大小。但是,如果它是一个新创建的缓冲区,我该如何告诉它我需要多少空间?似乎没有任何调整大小的函数可供我调用。
我可以使用:int result = PyBuffer_FromContiguous(&m_view, const_cast<void*>(data), pySize, 'A');
将数据添加到我的缓冲区。但是我的缓冲区必须已经有了正确的大小,否则就无法写入。无论如何,我认为这不是正确的使用方式。
Cython不是一种选择。
您不应该直接调整Py_buffer
的大小,因为它只是PyObject
数据的接口。
相反,在底层PyObject
上使用PyByteArray_Resize()
(或可能使用_PyString_Resize()
)。
相关文章:
- C++字符*缓冲区的大小
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- Pybind11:将元组列表从Python传递到C++
- 如何在c++中使用引用实现类似python的行为
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 递归列出所有目录中的C++与Python与Ruby的性能
- IPC使用多个管道和分支进程来运行Python程序
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- ostream过载时的缓冲区冲洗
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 从python中调用C++函数并获取返回值
- 从C++缓冲区到python::boost::list
- 使用C++缓冲区创建PhotoImage:Python 3.3,Python.Boost和Tkinter
- 在 Python 中使用 OpenCV 将打包的 BGRA 图像缓冲区转换为 RGB 时遇到问题
- 正在写入新的Python缓冲区接口
- 将C++缓冲区复制到Python的最佳方式
- 通过LevelDB将协议缓冲区序列化数据从C++传递到Python
- 如何使用 boost.python 将预填充的"unsigned char*"缓冲区传递给C++方法?
- 将C++缓冲区公开为Python 3字节