【发布时间】:2013-01-27 11:30:37
【问题描述】:
当我用c_char 数组定义一个ctypes 结构作为字段时,我无法获得该字段的大小,但如果我切换到c_ubyte 数组,我可以。我的理解是,在以下示例中,Python 将bar2 视为指针(char*),而不是bar1。如果有人能解释其背后的逻辑,我将不胜感激。
import ctypes
class Foo(ctypes.Structure):
_fields_ = [ ('bar1', ctypes.c_ubyte*1),
('bar2', ctypes.c_char*1) ]
foo = Foo()
for f,t in foo._fields_:
print t
print ctypes.sizeof(foo.bar1)
print ctypes.sizeof(foo.bar2)
这是输出:
<class '__main__.c_ubyte_Array_1'>
<class '__main__.c_char_Array_1'>
1
Traceback (most recent call last):
File "test.py", line 12, in <module>
print ctypes.sizeof(foo.bar2)
TypeError: this type has no size
【问题讨论】:
-
我怀疑这与 C 对待 char 和 char 数组的方式与 Python 在两者都是序列的方式不同方面有关。只需使用
ctypes.c_byte而不是ctypes.c_char和foo.bar2就会有大小。 -
@martineau 对,我使用的是
ctypes.c_ubyte。尝试根据标准char sin_zero[8]定义sockaddr_in时遇到该问题