Python ctypes示例异常



我正在研究如何通过ctypes将具有字符串字段的结构传递给C。我在Ubuntu (DigitalOcean)上使用Python3。我一直在努力让它工作。我在文档中找到了一个非常简单的例子,设置一个ctypes.c_char_p对象指向一个Python字符串。

>>> from ctypes import *
>>> class cell(Structure):
...   pass
>>> cell._fields_ = [('name', c_char_p), ('next', POINTER(cell))]
>>> c1=cell()
>>> c1.name = "foo"

但是我得到了这个异常:

TypeError: bytes or integer address expected instead of str instance

此错误与我基于代码所遇到的情况所期望的一致。我的问题是,是我误解了这个例子还是这个例子不对?

这可能是因为ctypes.c_char_p是字节流,而不是字符串。如果你写c1.name = b'bar',它应该工作。然后,要从中恢复Python字符串,您应该使用c1.name.decode('utf-8')解码它。

最新更新