jpf*_*der 6 python struct nested unpack
我正在尝试解压一个 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;
Run Code Online (Sandbox Code Playgroud)
现在,在我的 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)
Run Code Online (Sandbox Code Playgroud)
然而,这显然是不正确的;格式字符串的大小为calcsize44,而结构体本身的大小为 54。
如何为此结构制定正确的格式字符串?
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:]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6365 次 |
| 最近记录: |