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'作爲參數,並且它會受到正常的類型轉換和整數強制。你能解釋一下你想做什麼嗎? –
我更新了問題。檢查它現在是否清楚。 –