Python 如何使用ctypes在特定地址显示字符串
我正在处理一个C dll,其中一个函数返回指向字符串的指针。我想打印这个指针的内容 目前我有:Python 如何使用ctypes在特定地址显示字符串,python,ctypes,Python,Ctypes,我正在处理一个C dll,其中一个函数返回指向字符串的指针。我想打印这个指针的内容 目前我有: >>> str_p = dll.myfunction(42) >>> print str_p 1371678884 我尝试了repr(str_p),repr(str_p.value),但似乎str_p被视为一个整数 当然,打印str(stru p)也会打印1371678884使用: ctypes.string_位于(地址[,大小]) 此函数返回字符串 从内存地址开
>>> str_p = dll.myfunction(42)
>>> print str_p
1371678884
我尝试了repr(str_p)
,repr(str_p.value)
,但似乎str_p
被视为一个整数
当然,打印str(stru p)
也会打印1371678884
使用:
ctypes.string_位于(地址[,大小])
此函数返回字符串
从内存地址开始。如果指定了大小,则使用它
作为大小,否则假定字符串以零结尾
使用:
ctypes.string_位于(地址[,大小])
此函数返回字符串
从内存地址开始。如果指定了大小,则使用它
作为大小,否则假定字符串以零结尾
将函数的
restype
设置为
因此,这将对您有效:
>>> dll.myfunction.restype = c_char_p
>>> str_p = dll.myfunction(42)
>>> print str_p
The Content Of Your String
将函数的
restype
设置为
因此,这将对您有效:
>>> dll.myfunction.restype = c_char_p
>>> str_p = dll.myfunction(42)
>>> print str_p
The Content Of Your String
print str(str_p)
如果将str_p
视为一个整数,则将打印相同的字符串。因此,您将得到什么以及希望打印什么?函数将返回指向字符串的指针。我得到的不是指针而是地址(我想1371678884是一个地址)。问题是如何获取位于该地址的数据。如果您使用ctypes模块,您是否尝试过ctypes.pointer(str\u p)
?print str(str\u p)
将打印相同的数据,如果str\u p
被视为整数。那么您得到了什么以及希望打印什么呢?函数将返回指向字符串的指针。我得到的不是指针而是地址(我想1371678884是一个地址)。问题是如何获取位于此地址的数据。如果您使用的是ctypes模块,您是否尝试过ctypes.pointer(str\u p)
?不,这是绝对错误的。默认的重新类型是c_int
,因此64位指针将被截断为32位。另一个答案是正确的。但是它工作得很好,它回答了我的问题:)@novox,没有将restype
设置为指针类型,您的stru p
变量是被截断为32位的地址。仅当字符串的地址恰好适合32位int
或您恰好使用32位进程时,此选项才有效。它通常在64位进程中不起作用。您必须将restype
设置为指针类型,例如c\u char\p
。不,这是绝对错误的。默认的重新类型是c_int
,因此64位指针将被截断为32位。另一个答案是正确的。但是它工作得很好,它回答了我的问题:)@novox,没有将restype
设置为指针类型,您的stru p
变量是被截断为32位的地址。仅当字符串的地址恰好适合32位int
或您恰好使用32位进程时,此选项才有效。它通常在64位进程中不起作用。必须将restype
设置为指针类型,例如c\u char\p
。