>> libc.printf("%c\n",-6ren">
gpt4 book ai didi

python - 使用 ctypes 时 islower 结果不正确

转载 作者:太空狗 更新时间:2023-10-30 02:20:14 25 4
gpt4 key购买 nike

>>> from ctypes import *
>>> import ctypes.util
>>> libc = CDLL("libc.so.6")
>>> libc.printf("%c\n", 104)
h
2
>>> libc.islower(104) # Works fine
512
>>> libc.islower.restype = c_bool # But when i do this...
>>> libc.islower(104)
False
>>> c_bool(512)
c_bool(True)

就我个人而言,我认为“h”是小写的..

这是 ctypes 中的错误,还是我做错了什么?

最佳答案

restype 不只是告诉 Python 输出类型,最重要的是,告诉期望的 C 类型是什么,以及如何编码它。 islower 返回一个 int,通常是 4 个字节宽;如果你说它返回一个 bool(通常是 1 个字节),你就违反了编码代码的预期。

这次你得到了一个不正确的结果(可能是因为在你的平台上返回代码进入了一个寄存器,所以它只是占用了它的低 8 位),在另一个平台或另一个类型上这很容易破坏堆栈,从而使您的流程崩溃。

所以:不要那样做。始终遵守 C API 类型并在调用后 进行转换。

关于python - 使用 ctypes 时 islower 结果不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24590878/

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