如何从指向字符串的PyObject获取char*

2024-04-18 15:40:08 发布

您现在位置:Python中文网/ 问答频道 /正文

如何从指向字符串的PyObject中获取char*。例如,这是python脚本

Test.Connect("272.22.20.65", 1234)

这是C++代码,

static PyObject* Connect(PyObject *self, PyObject *args)
{
    PyObject* pIP;
    PyObject* pPort;

    if (!PyArg_UnpackTuple(args, "Connect", 2, 2, &pIP, &pPort)) 
    {
        return NULL;
    }

    const char* zIP = GetAsString(pIP);
    long iPort      = PyLong_AsLong(pPort);

我想把这个IP地址作为char*(GetAsString是一个伪函数:D)。请注意,我使用的是Python3.1。

附则。 我认为这个问题没有得到正确的答案, 因为在Python 3中没有PyStringObject或PyString-AsString。不是吗?


Tags: pip字符串代码testself脚本ifconnect
2条回答

这是我的便携式配方,它使使用默认编码,在适用的地方。它假设您从名为oPyObject*开始。如果函数调用中仍有输入元组,则可以跳过前两行。

PyObject* args = Py_BuildValue("(O)", o);
/* Py_DECREF(o); if o is not borrowed */
if (!args) return 0;
const char* s = 0;
if (!PyArg_ParseTuple(args, "s", &s)) {
  Py_DECREF(args);
  return 0;
}

/* s now points to a const char* - use it, delete args when done */

Py_DECREF(args);

注:我还没有测试过它,但它也应该可以与旧版本的Python一起使用。上面没有版本特定的内容。

先是你encode it,然后是你retrieve it。别忘了把这个临时的降下来。

相关问题 更多 >