9
我想在我的C模块中传递一个函数参数uint8_t的数组。如何处理Python扩展中的uint8_t?
我找不到直接解析这个数组的方法,所以我将它解析成PyObject_t,然后作为PyTuple_t对象迭代。这样,我需要将这个元组的每个元素PyObject_t转换为uint8_t。
我该怎么做,一旦没有PyInt_FromUINT8_t函数或类似的东西?
我想在我的C模块中传递一个函数参数uint8_t的数组。如何处理Python扩展中的uint8_t?
我找不到直接解析这个数组的方法,所以我将它解析成PyObject_t,然后作为PyTuple_t对象迭代。这样,我需要将这个元组的每个元素PyObject_t转换为uint8_t。
我该怎么做,一旦没有PyInt_FromUINT8_t函数或类似的东西?
您通常可以使用unsigned char
与B
脱身。据Parsing Arguments你应该能够做到:
uint8_t b;
if (!PyArg_ParseTuple("b", &b)) {
return NULL;
}
如果不能直接使用的参数(例如,你正在处理一个PyObject
,只需使用的PyInt_*
,PyLong_*
或PyNumber_*
功能之一(https://docs.python.org/3/c-api/number.html?highlight=pynumber#c.PyNumber_AsSsize_t)
从uin8_t
转换为PyObject
也很简单,你可以使用PyInt_FromLong
或PyLong_FromLong
我正在处理数组,在这种情况下,使用PyIn迭代PyTuple或PyList t_FromLong不会导致无效的内存访问? 此函数将尝试读取4或8个字节,但列表中的每个元素只分配1个字节。 –
“PyXXX”函数都不使用指向整数的指针,而只是简单地按值返回;所以'PyInt_FromLong'例如会接受一个'int'作为参数,并且它会受到正常的类型转换和整数强制。你能解释一下你想做什么吗? –
我更新了问题。检查它现在是否清楚。 –