struct.pack
знает все о выравнивании байтов C-компилятора и добавит упаковочные байты к вашим данным без запроса.Вот почему ваша структура имеет длину 32 байта, хотя ваши данные требуют 4 + 1 + 4 + 6 + 8 (= 23) байтов данных.Присмотритесь, и вы увидите (например), что string
было дополнено справа дополнительным нулевым байтом, так что double будет занимать последние 8 байтов структуры.Поэтому я не уверен, что убежден, что выравнивание неверно.
Вы можете самостоятельно взять на себя ответственность за заполнение (формат x
), но я полагаю, что struct.pack
знаетименно то, что он делает.
Если ваши упакованные данные не интерпретируются так, как вы ожидаете, то намного более вероятно, что возникла проблема со спецификацией struct или что порядок байтов не соответствует ожидаемому.