Я пытаюсь распаковать C-структуру, которая передается моей программе Python в двоичной форме и включает в себя еще одну вложенную структуру. Соответствующая часть заголовка C выглядит следующим образом:Распаковка вложенных C-структур в Python
typedef struct {
uint8_t seq;
uint8_t type;
uint16_t flags;
uint16_t upTimestamp;
}__attribute__ ((packed)) mps_packet_header;
typedef struct {
mps_packet_header header;
int16_t x[6];
int16_t y[6];
int16_t z[6];
uint16_t lowTimestamp[6];
}__attribute__((packed)) mps_acc_packet_t;
typedef mps_acc_packet_t accpacket_t;
Теперь в моей программе Python, я хочу использовать struct.unpack
для распаковки accpacket
. Однако я не знаю, какая строка формата для распаковки должна быть такой, как accpacket
содержит вложенный mps_packet_header
. Я попытался просто вставить строку формата для mps_packet_header
в начале, а затем продолжается с остальной частью accpacket
:
s = struct.Struct('= B B H H 6h 6h 6h H')
seq, _type, flags, upTimestamp, x, y, z, lowTimestamp = s.unpack(packet_data)
Однако это, по-видимому, не правильно; строка формата имеет из 44, а сама структура имеет размер 54.
Как сформулировать правильную строку формата для этой структуры?
Хороший улов; Я пропустил последний квантификатор. При этом '.size' дает 54. –