gpt4 book ai didi

c++ - 将 C++ 缓冲区公开为 Python 3 字节

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:21 24 4
gpt4 key购买 nike

使用 Boost::Python,是否有办法使 Python 3.2 可以将原始 C++ 缓冲区作为 bytes 对象访问?

very similar question 有一个 Python 2 答案,但是那里描述的 PyBuffer_FromReadWriteMemory 函数在 Python 3 中不再存在。

编辑:感谢 user2167433 的回答,我真正想要的是一个只读的 memoryview对象,而不是 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 是访问支持缓冲区接口(interface)的对象的 Python 方式。

C API memoryview memoryview class

关于c++ - 将 C++ 缓冲区公开为 Python 3 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23064407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com