История изменений
Исправление Deleted, (текущая версия) :
удивительное дело. выставил всем одинаковый тип c_uint32
class header(ctypes.Structure):
_pack_ = 0
_fields_ = [
('fieldA', ctypes.c_uint32, 3),
('fieldB', ctypes.c_uint32, 6),
('fieldC', ctypes.c_uint32, 13),
('fieldD', ctypes.c_uint32, 9)
]
тестируем в питоновском шелле
>>> print header.fieldA
<Field type=c_uint, ofs=0:0, bits=3>
>>> print header.fieldB
<Field type=c_uint, ofs=0:3, bits=6>
>>> print header.fieldC
<Field type=c_uint, ofs=0:9, bits=13>
>>> print header.fieldD
<Field type=c_uint, ofs=0:22, bits=9>
>>> ctypes.sizeof(header())
4
это какой-то мейджик. все оффсеты встали на свое место и размер стал каким и должет быть. диво дивное, чудеса чудесные.
Исходная версия Deleted, :
удивительное дело. выставил всем одинаковый тип c_uint32
class header(ctypes.Structure):
_pack_ = 0
_fields_ = [
('fieldA', ctypes.c_uint32, 3),
('fieldB', ctypes.c_uint32, 6),
('fieldC', ctypes.c_uint32, 13),
('fieldD', ctypes.c_uint32, 9)
]
тестируем в питоновском шелле
>>> print header.fieldA
<Field type=c_uint, ofs=0:0, bits=3>
>>> print header.fieldB
<Field type=c_uint, ofs=0:3, bits=6>
>>> print header.fieldC
<Field type=c_uint, ofs=0:9, bits=13>
>>> print header.fieldD
<Field type=c_uint, ofs=0:22, bits=9>
>>> ctypes.sizeof(ms.header())
4
это какой-то мейджик. все оффсеты встали на свое место и размер стал каким и должет быть. диво дивное, чудеса чудесные.