import struct
import ctypes as ct
def read_buffer(data):
size = struct.unpack('<h', data[64:66])[0]
class TableData(ct.Structure):
_fields_ = [('delta', ct.c_float),
('x', ct.c_float)]
def __repr__(self):
return f'TableData(delta={self.delta}, x={self.x})'
class TableParameters(ct.Structure):
_fields_ = [('parameter1', ct.c_uint16 * 30),
('parameter2', ct.c_float),
('size', ct.c_uint16),
('parameter3', ct.c_uint16),
('parameter4', ct.c_float),
('parameter5', ct.c_float),
('Table', TableData * size)]
def __repr__(self):
return (f'TableParameters(parameter1={list(self.parameter1)},'
f'parameter2={self.parameter2},'
f'size={self.size},'
f'parameter3={self.parameter3},'
f'parameter4={self.parameter4},'
f'parameter5={self.parameter5},'
f'Table={list(self.Table)}')
return TableParameters.from_buffer_copy(data)
data = struct.pack('<30HfHHff4f',*range(30),1.125,2,8,2.5,3.25,4.75,5.5,6.25,7.75)
a = read_buffer(data)
print (a.parameter1[0])
print (a.parameter1[3])
print (a.parameter5)
print ('------------')
print (len(a.Table))
a.size = 10
print (len(a.Table))
输出:
0
3
3.25
------------
2
2
这是一个具有可变大小缓冲区的结构。名为“size”的字段应该确定名为“Table”的字段的大小。读取数据时,它工作正常。但是当试图修改“表格”的大小时,它不起作用或者至少不像人们想象的那么简单。在输出中,我们可以看到“Table”的大小没有改变,无法向其添加数据点。