2024-04-28 06:58:37 发布
网友
正确的方法是什么分段断层)将uint8缓冲区发送到定义为的C函数:
uint8
void f(uint8* p, size_t len) _lib.f.argtypes=[ctypes.POINTER(ctypes.c_ubyte), ctypes.c_uint]
通过您在注释-(cbytes.c_ubyte * 256)()中的方式创建的数组对象很好。 但在ctypes“行话”中,这个对象并不等同于ctypes.POINTER(ctypes.c\u ubyte)-当您试图用数组作为参数调用函数时,ctypes应该警告您。在
(cbytes.c_ubyte * 256)()
无论如何,可能当您将创建的数组作为参数传递时,ctypes并没有将对其内容的引用传递给C(可能是Python对象的地址,而不是其内容的地址)。在
如果将指向数组内容的指针转换为所创建的指针类型,则可能会起作用:
pointer_type = ctypes.POINTER(ctypes.c_ubyte) _lib.f.argtypes=[pointer_type), ctypes.c_uint] data_block = (ctypes.c_ubyte * 256)() pointer = ctypes.cast(ctypes.addressof(data_block, pointer_type)) _lib.f(pointer, 256)
通过您在注释-
(cbytes.c_ubyte * 256)()
中的方式创建的数组对象很好。 但在ctypes“行话”中,这个对象并不等同于ctypes.POINTER(ctypes.c\u ubyte)-当您试图用数组作为参数调用函数时,ctypes应该警告您。在无论如何,可能当您将创建的数组作为参数传递时,ctypes并没有将对其内容的引用传递给C(可能是Python对象的地址,而不是其内容的地址)。在
如果将指向数组内容的指针转换为所创建的指针类型,则可能会起作用:
相关问题 更多 >
编程相关推荐