【问题标题】:How to get char string from PyObject str?如何从 PyObject str 中获取 char 字符串?
【发布时间】:2021-03-08 19:41:07
【问题描述】:

您好,我正在学习如何在 c++ 中使用 python,并且想知道如何将返回的 python 值转换为可以在 c++ 中使用的值。

这是我的代码:


    CPyInstance pyInstance;
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append(\".\")");
    CPyObject pName = PyUnicode_FromString("Info");
    CPyObject pModule = PyImport_Import(pName);

    if (pModule)
    {
        CPyObject pFunc = PyObject_GetAttrString(pModule, "getTracks");

        if (pFunc && PyCallable_Check(pFunc))
        {
            CPyObject pValue = PyObject_CallObject(pFunc, NULL);
            //print the returned string
        }
        else { std::cout << "Error: function getTracks()\n"; }
    }
    else { std::cout << "error: no module imported"; }

    return 0;
def getTracks():
    
    returnString = ""

    for track in results['tracks'][:10]:
        returnString += 'track    : ' + track['name']
      
    return returnString

【问题讨论】:

    标签: python c++ c


    【解决方案1】:

    您可以使用UTF-8 Codecs 部分中的函数。

    例如PyUnicode_AsUTF8AndSize:

    CPyObject pValue = PyObject_CallObject(pFunc, NULL);
    Py_ssize_t size;
    const char* data = PyUnicode_AsUTF8AndSize(pValue.getObject(), &size);
    std::cout << std::string(data, size) << std::endl;
    

    PyUnicode_AsUTF8

    const char* data = PyUnicode_AsUTF8(pValue.getObject());
    std::cout << data << std::endl;
    

    const char* PyUnicode_AsUTF8AndSize(PyObject *unicode, Py_ssize_t *size)

    返回指向 Unicode objectUTF-8 编码的指针,并将编码表示的大小(以字节为单位)存储在 size 中。 size 参数可以是NULL;在这种情况下,不会存储大小。返回的缓冲区总是附加一个额外的空字节(不包括在大小中),无论是否有任何其他空代码点。

    这会缓存 Unicode object 中字符串的 UTF-8 表示形式,随后的调用将返回指向同一缓冲区的指针。调用者不负责释放缓冲区。

    [...]

    const char* PyUnicode_AsUTF8(PyObject *unicode)

    作为PyUnicode_AsUTF8AndSize(),但不存储大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-18
      • 2012-12-11
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      相关资源
      最近更新 更多