将PyInt转换为C Int
我需要把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 在尝试计算列表长度时遇到了错误。这里有一些文档,你可以阅读一下,了解如何处理这些错误: