Используйте это:
title,args,flt1,flt2,flt3,flt4 = struct.unpack('>32s8sdddd', data)
Поскольку вы ничего не знаете о структуре, это основано на следующих предположениях:
- Поле
title
являетсястрока длиной не более 32 байтов, потому что она является текстовой строкой, а 32-й байт всегда является 0
. - Поле
args
- это строка длиной не более 8 байтов, потому что это то, что остается, когда вы предполагаете… - каждый из четырех «поплавков» имеет длину 8 байтов и, таким образом, технически равен
double float
.Последние 8 байтов всегда все 0
.Это допустимое двойное число (на самом деле 0
);все 8 байтов перед ними являются действительными числами с плавающей точкой в формате с прямым порядком байтов, что составляет 2 действительных числа с плавающей точкой.Таким образом, считая в обратном направлении, еще 2 нуля должны быть двумя другими значениями, а несколько оставшихся байтов должны принадлежать полю args
.
Запуск unpack
на предоставленных данных дает вам эторезультат:
b'Person0/elements/alpha_absolute\x00' b',dddd\x00\x00\x00' 0.0 0.0 0.1066905392564757 0.0
b'Person0/elements/alpha_absolute\x00' b',dddd\x00\x00\x00' 0.0 0.0 0.10668132073594472 0.0
b'Person0/elements/alpha_absolute\x00' b',dddd\x00\x00\x00' 0.0 0.0 0.10571479478158681 0.0
b'Person0/elements/alpha_absolute\x00' b',dddd\x00\x00\x00' 0.0 0.0 0.10315484049525485 0.0
b'Person0/elements/alpha_absolute\x00' b',dddd\x00\x00\x00' 0.0 0.0 0.09594104835265774 0.0
, где единственное, что примечательно, так это то, что из четырех предметов с плавающей запятой только один фактически используется.