我正在 Python 中使用
ctypes
测试我的结构类。正在阅读ctypes Document 3.12.0
,
只有_fields_
。
class Struct(ct.Structure):
_fields_ = [
('Header', ct.c_short),
('Data_int', ct.c_int64),
('Data_string', ct.c_char)
]
test = Struct()
test.Header = 10
test.Data_int = 64
test.Data_string = 'bx'
>>>
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-32-9b3bbfd7aaa9> in <cell line: 4>()
2 test.Header = 10
3 test.Data_int = 64
----> 4 test.Data_string = 'bx'
TypeError: one character bytes, bytearray or integer expected
为什么
_fields_
不起作用但下一个起作用?下一张是_field_
。
class Struct(ct.Structure):
_field_ = [
('Header', ct.c_short),
('Data_int', ct.c_int64),
('Data_string', ct.c_char)
]
test = Struct()
test.Header = 10
test.Data_int = 64
test.Data_string = 'bx'
>>>
实际的属性名称是
_fields_
。ct.c_char
ctype 类型相当于 1 字符字节对象。因此,您需要将一个字符字节对象分配给 test.Data_string
才能使您的第一个片段正常工作。
import ctypes as ct
class Struct(ct.Structure):
_fields_ = [
('Header', ct.c_short),
('Data_int', ct.c_int64),
('Data_string', ct.c_char)
]
test = Struct()
test.Header = 10
test.Data_int = 64
test.Data_string = b'b'