如何将Python对象转换为C变量?

时间:2013-10-14 13:51:37

标签: python c casting

我很想直截了当。我非常有信心这是我不知道如何提出这个简单问题的案例之一。

尝试将python对象(列表)转换为无符号字符数组。

PyObject * py_data;
unsigned char c_data[MAX_LENGTH];

// py_data is filled using the PyArg_ParseTuple(....)

// Build the outbound payload
for(i=0; i < block_length; i++)
{
    c_data[i] = HOW_TO_CAST_THIS(py_data[i]);
}

我已经阅读了tutorial written by Ned Batchelder,这是一本很好的阅读,以及没有运气的Google搜索。

任何其他教程或参考建议都会很棒。

1 个答案:

答案 0 :(得分:3)

要从元组中获取项目,您必须使用PyTuple_GetItem(或者,如果您知道它是一个元组,则可以使用不安全的PyTuple_GET_ITEM)。这会为您提供PyObject s。

要从int获取PyObject,请使用PyInt_AsLong

从不PyObject转换为C类型(void *除外),从不尝试使用PyObject进行索引索引表示法(py_data[i])。两者都会给你很糟糕的结果。始终使用Python API方法来处理PyObject s。