将PyInt转换为C Int

0 投票
1 回答
4867 浏览
提问于 2025-04-17 07:01

我需要把PyInt转换成C语言的int类型。在我的代码中

count=PyInt_FromSsize_t(PyList_Size(pValue))

pValue是一个PyObject,具体来说是一个PyList。我遇到的问题是,PyList_Size这个函数没有给我正确的列表大小(我本来应该得到5,但它却给了我6000000),或者是因为我在用C语言和Python脚本交互时,数据类型出现了问题。理想情况下,我希望count是C语言的int类型。

我找到了一些Python/C的API,它们返回的是长整型的C数据类型……这不是我想要的……有没有人能告诉我正确的方法或API吗?

1 个回答

3

PyInt_FromSsize_t() 这个函数会返回一个完整的 Python int 对象,并且给你这个对象在内存中的地址——这就是为什么会有600万这个数字的原因。你其实只想要通过 PyList_Size() 得到的数量,然后把它转换成 C 语言的整数,我觉得这样就可以了:

count = (int) PyList_Size(pValue)

如果列表可能会很长,你可能需要考虑把 count 定义为 long 类型,这样你就可以转换成这个特定的类型。

注意:如果 count-1,这意味着 Python 在尝试计算列表长度时遇到了错误。这里有一些文档,你可以阅读一下,了解如何处理这些错误:

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

撰写回答