获取ctypes.c_ulong指针的值?

Sha*_*ane 4 python ctypes

例如:

pointer = ctypes.POINTER(ctypes.c_ulong)
b = pointer(ctypes.c_ulong(20))
Run Code Online (Sandbox Code Playgroud)

我得到什么b的int值?

Ale*_*lli 8

你的意思是,取消引用bc_ulong(20)?那是b.contents.或者你的意思是,看看内存中指针恰好指向的位置,好像它是一个整数而不是一个指针?那是ctypes.cast(b, ctypes.c_ulong)(如果指针适合您平台上的长指).

  • 请注意,您只能转换为指针类型:“types.cast(b, ctypes.c_ulong)”是非法的。但是,您可以改为说“types.cast(b, ctypes.c_void_p).value)”。 (6认同)
  • 或者只使用`b [0]`,它调用类型的`getfunc`来返回一个Python整数,例如`b [0] == 20`.此外,您只能转换为指针类型,因此第二个建议将失败.从其他指针获取地址的最快方法是使用缓冲协议:`ctypes.c_void_p.from_buffer(b).value`.或者使用`ctypes.cast(b,ctypes.c_void_p).value`,但是`cast`效率不高,因为它是使用外部函数调用实现的. (3认同)
  • 非常感谢!b.contents是! (2认同)