如何在Python中解包数组的C样式结构



我正在使用struct.unpull来解压缩python中的C风格结构。我有一个工作方法,但期望优化并尝试了非工作方法。

C代码:

struct __attribute__((packed))
{
struct
{
uint16_t A : 4;
uint16_t B : 12;
} status;
int16_t   C;
int16_t   D;
int16_t   E;
int16_t   F[4];
float32_t G;
} sampleStruct;

Python代码:

工作:

A, B, C, D, E, F0, F1, F2, F3, G = struct.unpack('<BHhhh4hf', bytes(rx_packet[1:]))

不工作:

A, B, C, D, E, F, G = struct.unpack('<BHhhh4hf', bytes(rx_packet[1:]))

如何纠正不工作的方法?

只要只有一个数组,就使用扩展的拆包赋值:

#              v pack into F
A, B, C, D, E, *F, G = struct.unpack('<BHhhh4hf', bytes(rx_packet[1:]))

*F目标将创建一个列表,其中包含无法与任何以前或以后的目标匹配的其余项目。