конвертировать PyInt в C Int - PullRequest
       50

конвертировать PyInt в C Int

0 голосов
/ 25 ноября 2011

Мне нужно конвертировать PyInt в C int. В моем коде

count=PyInt_FromSsize_t(PyList_Size(pValue))

pValue - это PyObject, PyList. проблема, которую я имел, состоит в том, что PyList_Size не возвращает мне правильный размер списка (число должно быть 5, но это дало мне 6 миллионов), или есть проблема с типами данных, так как я в коде C взаимодействует со скриптами Python. В идеале я хочу, чтобы count был в типе C int.

Я нашел API Python / C, которые возвращают мне длинные типы данных C ... это не то, чего я хочу ... Кто-нибудь может указать мне правильный метод или API ??

1 Ответ

3 голосов
/ 25 ноября 2011

PyInt_FromSsize_t() возвращает полноценный объект Python int, находящийся в памяти, и возвращает его адрес памяти - отсюда и 6-миллионное число. Вы просто хотите получить скаляр, возвращаемый PyList_Size(), и привести его к целому числу C, я думаю:

count = (int) PyList_Size(pValue)

Если список может быть очень длинным, вы можете подумать о том, чтобы вместо него сделать count a long, и в этом случае вместо этого вы можете привести этот конкретный тип.

Примечание: число -1 означает, что Python обнаружил исключение при попытке измерить длину списка. Вот документы, которые вы должны прочитать, чтобы знать, как обрабатывать исключения:

http://docs.python.org/c-api/intro.html#exceptions

...