По умолчанию типы C представлены в собственном формате и порядке байтов компьютера и при необходимости выровнены путем пропуска байтов панели (в соответствии с правилами, используемыми компилятором C).
Распаковка ожидает, что float будет выровнен по 8-байтовой границе и пропускает более 1 байта заполнения, чтобы попасть туда. Вы можете подтвердить это, пропустив 1 байт самостоятельно:
>>> struct.unpack_from('1sxHxbxf', a)
('9', 255, 10, 2.8355782166755716e-09)
>>> struct.unpack_from('f',a[8:])
(2.8355782166755716e-09,)
Чтобы отключить выравнивание, добавьте =
, <
, >
или !
в начало строки формата .
>>> struct.unpack_from('=1sxHxbxf', a)
('9', 255, 10, 110.01000213623047)