我有一个从dll导入并在ctypes中定义的函数。我将restype
设置为c_void_p
。所以现在当我调用这个函数时,结果它返回指向32字节数组的指针。如何将此指针转换为Python字节类型?在
以下是函数(它是来自OpenSSL的HMAC
):
self.HMAC = self._lib.HMAC
self.HMAC.restype = ctypes.c_void_p
self.HMAC.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_void_p]
编辑:我尝试过用c_char_p
替换c_void_p
。我得到了一些结果,但是c_char_p
表示以空结尾的字符串,因此结果在第一个00h的点处被截断。如果HMAC
在结果中没有任何零,那么它就完美地工作了。但这仍然不能解决我的问题。在
使用
ctypes.c_void_p
作为返回类型通常是错误的。在对于非nul结尾的字符串,应该将其设置为大小合适的字符数组;在您的例子中是32,所以
ctypes.c_char * 32
。restype
是指向此的指针,因此将其包装在ctypes.POINTER
中。在您可以使用该指针的
value
(或raw
;在这个上下文中是相同的)属性,以bytes
对象的形式访问返回值。在下面是一个使用^{} 的实际示例,它返回一个13个字符的字符串:
相关问题 更多 >
编程相关推荐