LINUX.ORG.RU

История изменений

Исправление 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

это какой-то мейджик. все оффсеты встали на свое место и размер стал каким и должет быть. диво дивное, чудеса чудесные.