2012-03-27 67 views
3

如何從指向字符串的PyObject獲取char *。例如,這是python腳本,如何從指向字符串的PyObject獲取char *

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問題得到了正確答案, ,因爲沒有PyStringObjectPyString_AsString在Python 3中。不是嗎?

+0

@Sven Marnach。它是str。但是沒有辦法從PyUnicode_ *獲取char *。我錯了嗎 ? – Morpheus 2012-03-27 19:41:30

+0

哈哈... Sven Marnach在哪裏?當我回復您時,您的評論缺失 – Morpheus 2012-03-27 19:43:38

回答

7

首先你encode it,然後你retrieve it。不要忘記暫時關閉。

+0

感謝您的回答,但它不起作用。 PyBytes_AsString正在返回NULL。 (以簡化的方式,這是我如何使用它,PyBytes_AsString(PyUnicode_AsUTF8String(pObject))) – Morpheus 2012-03-27 19:32:19

+0

ohh ....好的。我的錯。它工作正常。非常感謝。 – Morpheus 2012-03-27 19:38:10

+0

@Sven Marnach。感謝您的意見。我對python3感到困惑,python2x很簡單,不是。 – Morpheus 2012-03-27 19:40:13

0

這是我的便攜式配方,它使用默認編碼,適用的地方。它假定您從PyObject*開始,名稱爲o。如果你仍然有函數調用的輸入元組,你可以跳過前兩行。 PS:我還沒有測試過它,但它也應該可以與老版本的Python一起使用。沒有什麼是特定於版本的。

相關問題