如何处理 Python 扩展上的 uint8_t?

How to deal with uint8_t on a Python Extension?

我想将 uint8_t 的数组作为我的 C 模块中函数的参数传递。

我找不到直接解析这个数组的方法,所以我将它解析为 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_FromLongPyLong_FromLong