import struct class AFrame: def __init__(self, data: bytes): self.valid = False self.data_id = 0 self.data_len = 0 self.payload = b"" # A帧最小长度: 4+4+4+4+4+4 + 8 + 2 = 34 if len(data) < 34: return try: # 大端解包 magic, dlen, dir_, data_id, ptype, sat = struct.unpack('>IIIIII', data[:24]) payload = data[24:-2] tail = data[-2:] if magic != 0xEB90EB90 or tail != 0x4C3A.to_bytes(2, 'big'): return self.valid = True self.data_id = data_id self.data_len = dlen self.payload = payload except: pass def get_doubles(self): doubles = [] buf = self.payload while len(buf) >= 8: d = struct.unpack('>d', buf[:8])[0] doubles.append(d) buf = buf[8:] return doubles