这是my previous question, "Unpacking nested C structs in 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 lowTimestmp[6];
}__attribute__ ((packed)) mps_acc_packet_t;
typedef mps_acc_packet_t accpacket_t;
typedef struct {
int16_t hb1;
int16_t hb2;
} acam_hb_data_set;
typedef struct __attribute__ ((packed)) {
mps_packet_header header;
uint16_t temp;
uint16_t lowTimestmp[8];
acam_hb_data_set dms_data[8];
} mps_dms_packet_t;
由此产生了两个挑战。首先,我接收到的包(以二进制形式)可以是mps_acc_packet_t
或{mps_packet_header
中的type
字段,这两种包类型都有。这意味着我需要在知道包的全部内容之前解包,但我不知道如何干净地进行操作,因为(如果我没弄错的话)这两种数据包类型有不同的calcsize
(分别为54和56)。第二个挑战是解包mps_dms_packet_t
;正如您从结构的定义中看到的,这个包有一个由acam_hb_data_set
的8个实例组成的数组,而这个数组又是一个由两个int16
值组成的结构。我不知道如何为它构造一个正确的格式字符串。在
我以前的代码(在引入mps_dms_packet_t
之前)如下所示,如falsetru in his answer to my previous question所示:
这很有效。现在,我需要以某种方式读取头(我需要为其解压结构),然后根据结构的类型正确地解压该结构。在
我该怎么做呢?在
为什么不试试ctypes?它更易读,更容易打包/解包数据。在
相关问题 更多 >
编程相关推荐