首页 > 解决方案 > 在 Python3 中将 std::string 转换为 C++ 中的 PyObject

问题描述

我正在尝试转换std::string to PyObject.

std::string st = jsp.updateRoot(people, people);
PyObject* pValue = PyBytes_AsString(st);

使用上述方法不起作用。

我怎样才能转换?

标签: c++python-3.xpython-extensionspython-embedding

解决方案


来自文档:

char* PyBytes_AsString(PyObject *o)

返回指向 o 内容的指针。指针指向 o 的内部缓冲区,由 len(o) + 1 个字节组成。缓冲区中的最后一个字节始终为空,无论是否有任何其他空字节。不得以任何方式修改数据,除非该对象刚刚使用 PyBytes_FromStringAndSize(NULL, size) 创建。它不能被释放。如果 o 根本不是字节对象,则 PyBytes_AsString() 返回 NULL 并引发 TypeError。

在 OP 的情况下,这是错误的方向。

相反转换的函数是

PyObject* PyBytes_FromString(const char *v)

返回值:新引用。

返回一个新的字节对象,其中包含字符串 v 的副本作为成功的值,失败时返回 NULL。参数 v 不能为 NULL;它不会被检查。


推荐阅读