【发布时间】:2014-07-05 21:54:37
【问题描述】:
>>> 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 中的错误,还是我做错了什么?
【问题讨论】:
-
在 C 中任何非零值都为真。所以 512 是一个很好的指标,表明 h 是小写的。在内部,ctypes 通常实现为一个位图表,每个字符一个。这必须使用第 9 位小写。
-
@Gene 我认为他在最后一个命令中询问
False。 -
确实如此,但是当我用 c_bool 替换返回类型时,它返回 false
-
可能 c_bool 被错误地声明为 char 所以 2^9 被强制转换为 c_bool 会丢失 1 位。
-
建议删除C标签。