提问人:NormalToad 提问时间:11/9/2023 更新时间:11/9/2023 访问量:78
ctypes 结构参数理解问题
ctypes structure parameter understanding problem
问:
我正在测试我在 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'
>>>
答:
1赞
Abdul Niyas P M
11/9/2023
#1
那么,实际的属性名称是 .ctype 类型等效于 Python 中的 1 个字符字节对象。因此,您需要分配一个字符字节对象才能使您的第一个代码段正常工作。_fields_
ct.c_char
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'
关于你的第二个片段并不特别。Python 允许您动态分配属性。因此,即使您删除并尝试分配 atrributes,它也不会引发任何错误。但是,在使用 时,您将无法实现预期的功能。_field_
_field_
_field_
import ctypes as ct
class Struct(ct.Structure):
pass
test = Struct()
test.Header = 10
test.Data_int = 64
test.Data_string = b'b'
评论
0赞
NormalToad
11/9/2023
天哪,那是我的巨大错误(?谢谢你真诚的回答,先生。
评论