分析包含 NMEA 句子的日志文件C++

Parsing log files containing NMEA sentences C++

本文关键字:日志 文件 C++ 句子 包含 NMEA      更新时间:2023-10-16

我有多个NMEA句子的日志文件,其中包含相机捕获的地理位置。 其中一个句子的示例:$GPRMC,100101.000,A,3723.1741,N,00559.5624,W,0.000,0.00,150914,,A*63

我的问题是,你认为我该如何开始?只是需要有人把我推向正确的方向,谢谢。

我在 GPSReverse 驱动程序中使用此校验和函数。

string chk(const char* data)
{
// Assuming data contains a NMEA sentence (check it)
// Variables for keeping track of data index and checksum 
const char *datapointer = &data[1];
char checksum = 0;
// Loop through entire string, XORing each character to the next 
while (*datapointer != '')
{
checksum ^= *datapointer;
datapointer++;
}
// Print out the checksum in ASCII hex nybbles 
char x[100] = {0};
sprintf_s(x,100,"%02X",checksum);
return x;
}

之后,一些附加到 NMEA 字符串(例如,GGA(:

string re = chk(gga.c_str());
gga += "*";
gga += re;
gga += "rn";

因此,您可以读取 *,计算校验和,并查看它是否与 * 后面的字符串匹配。

在此处阅读更多内容。

每个句子都以"$"开头,以回车符/行结尾 源序列,并且不能超过 80 个字符的可见文本 (加上行终止符(。数据包含在此单个中 行,数据项以逗号分隔。数据本身只是 ASCII 文本,并且可能在某些句子中延伸至多个句子 专用实例,但通常完全包含在一个变量中 长度句子。数据的精度可能有所不同 包含在消息中。例如,时间可以指示为 秒或位置的小数部分可能显示为 3 甚至 4 小数点后的数字。读取数据的程序应 仅使用逗号来确定字段边界,而不依赖于 在列位置上。在 每个句子可以检查,也可以不由阅读的单位检查 数据。校验和字段由一个"和两个十六进制数字组成 表示所有字符之间的 8 位独占 OR,但不是 包括"$"和">"。某些句子需要校验和。