GPS数据处理
程序员文章站
2022-05-18 19:17:57
...
#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()
{
char str[100]="0";
int hh=0,mm=0,ss=0;//用来记录最后一句有效的北京时间
scanf("%s",str);
int key=0;
while(strcmp(str,"END")!=0)//判断是否输入结束
{
// int len=strlen(str);
/**< 1.因为语句的格式上的不同,定位的A不一定在18上 */
if(strncmp(str,"$GPRMC",6)==0&&strstr(str,",A,"))//判断是否是GPRMC语句 是否已定位
{
char a=str[1];
int i;
for(i=2;str[i]!='*';i++)//计算校验和
{
a^=str[i];
}//i指向'*'位置
a%=65536;
int b=0;
/**< 校验码有可能是包含字母的十六进制数 */
// b = strtol(strchr(str,'*')+1,NULL,16);
for(int j=0;j<len-i-1;j++)//将校验值转化为十进制
{
b+=(str[len-j-1]-'0')*pow(16,j);
}
if(a==b)//符合条件,转化并存储北京时间
{
hh=(str[7]-'0')*10+(str[8]-'0');
hh=(hh+8)%24;
mm=(str[9]-'0') *10+(str[10]-'0');
ss=(str[11]-'0')*10+(str[12]-'0');
key=1;
scanf("%s",str);
}
else//校验错误 ,继续读取下一条GPS语句
{
scanf("%s",str);
continue;
}
}
else//不是 GPRMC语句,继续读取下一条GPS语句
scanf("%s",str);
}
if(key==1)
{
printf("%02d:%02d:%02d",hh,mm,ss);
}
return 0;
}