将C++缓冲区公开为Python 3字节
Expose C++ buffer as Python 3 bytes
使用Boost::Python,是否有方法使原始C++缓冲区作为bytes
对象可供Python 3.2访问?
对于一个非常相似的问题,Python 2中有一个答案,但其中描述的PyBuffer_FromReadWriteMemory
函数在Python 3中已不存在。
编辑:多亏了user2167433的回答,我真正想要的是只读内存视图对象,而不是bytes
对象(使用memoryview
可以避免复制我认为的缓冲区)。
Python>3和Python<=3.2:
Py_buffer buffer;
int res = PyBuffer_FillInfo(&buffer, 0, data, dataSize, true, PyBUF_CONTIG_RO);
if (res == -1) {
PyErr_Print();
exit(EXIT_FAILURE);
}
boost::python::object memoryView(boost::python::handle<>(PyMemoryView_FromBuffer(&buffer)))
Python>=3.3:
我知道的最好的方法是使用PyMemoryView_FromMemory:
boost::python::object memoryView(boost::python::handle<>(PyMemoryView_FromMemory(data, dataSize, PyBUF_READ)));
memoryview是Python访问支持缓冲区接口的对象的方法。
C API内存视图内存视图类
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- Pybind11:将元组列表从Python传递到C++
- 使用 Python 导出 4 个字节浮点数
- python UnicodeDecodeError: 'utf8' codec 无法解码字节
- 调用c++库时,如何在Python中使用ctypes传递字节作为引用
- 将字节数组从 C++ 传递到 Python
- 如何将 Python 中的字节对象传递给用 Swig 包装的C++函数
- 如何修复"UnicodeDecodeError:"utf-8"编解码器无法解码字节时使用Python C扩展?
- 如何以快速速度将二进制文件分为C 或Python的6字节块
- 字节或整数地址预期,而不是str实例python 3
- 如何在Python中表示字节数组
- 如何使用C++的字节码优化初始化嵌入式 Python 解释器
- Unicode 友好的体系结构,用于将 Python 的字符串和字节类型桥接到C++
- 如何使用zmq/zeromq从传递给python的字符串表示(字节数组)中获取整数/浮点数
- Python套接字,下载几乎是原始文件大小的10倍,上传是0字节
- 用于串行通信的Python字节数组
- 将C数组转换为Python字节
- 将C++缓冲区公开为Python 3字节
- C++ wxsocket TCP 服务器发送无符号字符数组,但 python 客户端再获得 4 个字节