Python プログラムにバイナリ形式で渡され、ネストされた別の構造体を含む C 構造体をアンパックしようとしています。C ヘッダーの関連部分は次のようになります。
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)
しかし、これは明らかに正しくありません。フォーマット文字列の acalcsize
は 44 ですが、構造体自体のサイズは 54 です。
この構造体の正しいフォーマット文字列を作成するにはどうすればよいですか?