如何从指向字符串的 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)。请注意我使用的是Python 3.1。
P.S。 我不认为this问题得到了正确答案, 因为Python 3中没有 PyStringObject 或 PyString_AsString 。不是吗?
答案 0 :(得分:6)
首先是encode it,然后是retrieve it。不要忘记减刑。
答案 1 :(得分:0)
这是我的便携配方,它使用默认编码,适用。它假定您以PyObject*
开头,名为o
。如果你仍然有函数调用的输入元组,你可以跳过前两行。
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);
PS:我还没有测试过它,但它也适用于旧版本的Python。它没有任何特定版本。