Код формата I
ожидает, что будет передан указатель на unsigned int
. Не npy_uint8
или npy_intp
. unsigned int
и только unsigned int
. 8-битный uint
, такой как vop
, определенно является неправильным размером, поскольку попытка записи в него, как если бы он был нормальным unsigned int
, вероятно, перезапишет некоторые другие данные. npy_intp
может иметь или не иметь правильный размер, но так как он может быть неправильным, не используйте его.
Для первого аргумента вы хотите либо b
, либо B
, который являетсясимвол без знака (8 бит на почти каждой платформе). Прочитайте документацию для разницы. Второй аргумент, вероятно, захочет использовать K
для unsigned long long
, передать ему unsigned long long
(который должен быть достаточно большим ...), а затем преобразовать его в npy_intp
, проверяя наличие переполнения самостоятельно. В качестве альтернативы вы можете использовать O
, а затем позвонить PyLong_AsVoidPtr
, чтобы получить число до C.
В качестве отступления: npy_uint8 vop = 0xdeadbeef;
, вероятно, должно сгенерировать предупреждение, так как номер выиграл 'вписывается в 8 бит.