我有一个原始二进制文件(1 KB↓),它是一个GPS流的串行数据转储(以及一些相关的元数据)。我正特别尝试从表示GPS时间的二进制文件中提取一个值;我知道它在文件中的偏移量和宽度(分别为10和8字节,总帧宽为28字节),但它是以一种非常奇怪的方式编码的,如下面引号所述。
将这些数据读入列表或数组的最有效的方法是什么?
GPS时间--如果GPS时间有效消息3500设置为1,则全球定位系统时间传感器时间(以秒为单位,从周六2400时/周日0000小时开始),否则将报告SDN500系统启动时间。数据字按顺序为2,1 (MSW),4 (LSW),3。
SDN500-HV接口上的消息字长为16位。然而,SDN500-HV协议使用标准的通用异步接收发射机(UART)以8位组(字节)传输数据.这意味着需要两个字节才能组成一个消息字。 一个字节的信息作为11位的序列被传输:一个起始位,8位数据(首先是最小有效位(LSB) ),一个奇偶校验位(奇数)和一个停止位。对于每个16位数据字,首先传输最小的字节,然后是最重要的字节。由多个字组成的整数和浮点数据类型从最低编号的字传送到最高编号的字。这个规则的一个例外是时间标记,它以每个HV输出消息的单词6-9输出。四个16位数据字按以下顺序排列: 2,1,4,3,其中1表示最重要的单词,4表示最不重要的单词。每个单词都是单独的字节反转。
发布于 2016-03-25 01:11:43
从打开文件开始
fin = open("20160128t184727_pps","rb")然后在一个框架内阅读
def read_frame(f_handle):
frame = f_handle.read(28) # 28 byte frame size
start_byte = 10
end_byte = 18 # 4 words each word is 2 bytes
timestamp_raw = frame[start_byte:end_byte]
timestamp_words = struct.unpack(">HHHH",timestamp_raw)我可能会帮助更多,但我不知道时间戳开始字节和结束字节是从您的描述,因为它似乎不符合您引用的描述.我也不知道预期的产值是多少,...if,你提供的这些细节,我可能会提供更多帮助
https://stackoverflow.com/questions/36212452
复制相似问题