gpt4 book ai didi

python - ctypes:从任意整数构造指针

转载 作者:IT老高 更新时间:2023-10-28 20:39:56 25 4
gpt4 key购买 nike

出于低级目的,我需要从任意地址构造一个 ctypes 指针,以整数形式给出。例如:

INTP = ctypes.POINTER(ctypes.c_int)
p = INTP(0x12345678) # i *know* this is the address

但所有这些尝试都会导致

TypeError: expected c_long instead of int

我能做些什么来克服这个问题吗?如果有人想知道我为什么需要这个,这样做是为了从 win32file.PyOVERLAPPED 中提取 OVERLAPPED 结构,用于将 ctypes 公开的函数与 win32file 包装的 API 集成。

谢谢,
-托默

最佳答案

您可以使用 ctypes.cast(addr, type)。我将扩展您的示例以通过已知对象获取地址,以演示:

INTP = ctypes.POINTER(ctypes.c_int)
num = ctypes.c_int(42)
addr = ctypes.addressof(num)
print 'address:', addr, type(addr)
ptr = ctypes.cast(addr, INTP)
print 'pointer:', ptr
print 'value:', ptr[0]

输出:

address: 4301122528 <type 'int'>
pointer: <__main__.LP_c_int object at 0x1005decb0>
value: 42

关于python - ctypes:从任意整数构造指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5783761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com