python ctypes malloc返回一个Int而不是void*

python ctypes malloc返回一个Int而不是void*,python,ctypes,Python,Ctypes,我必须与一些c代码接口,我必须在缓冲区中传递一些数据。我想在python中分配这个缓冲区并设置值,但是malloc返回一个Int对象,而不是正确的ctypes.c\u void\u p。我想我做错了什么。。。我会很感激你的指点!下面是一个说明问题的简单示例: import ctypes import ctypes.util libc = ctypes.cdll.LoadLibrary(ctypes.util.find_library('c')) libc.malloc.argtypes = [

我必须与一些c代码接口,我必须在缓冲区中传递一些数据。我想在python中分配这个缓冲区并设置值,但是
malloc
返回一个
Int
对象,而不是正确的
ctypes.c\u void\u p
。我想我做错了什么。。。我会很感激你的指点!下面是一个说明问题的简单示例:

import ctypes
import ctypes.util

libc = ctypes.cdll.LoadLibrary(ctypes.util.find_library('c'))
libc.malloc.argtypes = [ctypes.c_size_t]
libc.malloc.restype = ctypes.c_void_p

mem = libc.malloc(ctypes.c_size_t(300))
t = type(mem) # <type 'int'>
导入ctypes
导入ctypes.util
libc=ctypes.cdll.LoadLibrary(ctypes.util.find_library('c'))
libc.malloc.argtypes=[ctypes.c\u size\u t]
libc.malloc.restype=ctypes.c\u void\u p
mem=libc.malloc(ctypes.c_size_t(300))
t=类型(mem)#

来自
c\u void\u p
的文档:“表示c void*类型。该值表示为整数。”如果您需要可以写入的内存,则必须将该值强制转换为正确大小的值:
(ctypes.c\u char*300)。可能来自地址(mem)
。注意
ctypes.c\u size\u t(300)
是不必要的。您已经通过
libc.malloc.argtypes
告诉
ctypes
,第一个参数是
c\u size\t
。你可以说
libc.malloc(300)
。对于输入参数,
ctypes
将为您转换。@jasonharper是的,可以。一旦我想把它传递给C函数,这就迫使我把它转换回指针,如果你把它作为一个答案,我会接受的!更短:
libc=ctypes.CDLL(无)