首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ctypes:从任意整数构造指针

ctypes:从任意整数构造指针
EN

Stack Overflow用户
提问于 2011-04-26 06:03:25
回答 1查看 11.6K关注 0票数 23

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

代码语言:javascript
复制
INTP = ctypes.POINTER(ctypes.c_int)
p = INTP(0x12345678) # i *know* this is the address

但所有这些尝试都会导致

代码语言:javascript
复制
TypeError: expected c_long instead of int

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

谢谢,

-Tomer

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-26 07:10:21

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

代码语言:javascript
复制
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]

输出:

代码语言:javascript
复制
address: 4301122528 <type 'int'>
pointer: <__main__.LP_c_int object at 0x1005decb0>
value: 42
票数 39
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5783761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档