我正在尝试解压一个 C 结构,该结构以二进制形式传递给我的 Python 程序,并包含另一个嵌套结构。 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)
然而,这显然是不正确的;格式字符串有一个calcsize
为 44,而结构本身的大小为 54。
如何为此结构制定正确的格式字符串?
- You
Struct
格式与 C 结构不匹配。 (最终的H
应该6H
)
- 结构体.解压(
6h
, ..) 确实返回 6 个字段。 (不是 6 个元素的)
所以你的代码应该看起来像..
s = struct.Struct('= B B H H 6h 6h 6h 6H')
fields = s.unpack(packet_data)
seq, _type, flags, upTimestamp = fields[:4]
x = fields[4:10]
y = fields[10:16]
z = fields[16:22]
lowTimestamp = fields[22:]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)