如何在Python扩展上处理uint8_t?

Ped*_*ves 9 python python-extensions uint8t

我想在我的C模块中传递一个函数的参数uint8_t的数组.

我找不到直接解析这个数组的方法,所以我将它解析为PyObject_t然后迭代为PyTuple_t对象.这样,我需要将此元组的每个元素PyObject_t转换为uint8_t.

一旦没有PyInt_FromUINT8_t函数或类似函数,我怎么能这样做呢?

Mar*_*erg 5

你通常可以逃脱B使用unsigned char.根据解析参数,您应该能够做到:

uint8_t b;
if (!PyArg_ParseTuple("b", &b)) {
    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

如果没有直接使用的参数(例如,你正在处理一个PyObject,只需使用的一个PyInt_*,PyLong_*PyNumber_*函数(https://docs.python.org/3/c-api/number.html?highlight=pynumber#c.PyNumber_AsSsize_t) .

从a转换uin8_t为a PyObject也很简单,你可以使用PyInt_FromLongPyLong_FromLong

  • @PedroAlves:一个元组不能有'uint8_t'.无论如何,你在哪里想到一堆'uint8_t'甚至来自Python方面?您可能想要使用`bytes`或`bytearray`对象. (2认同)