#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; }
GPS数据处理
猜你喜欢
转载自blog.csdn.net/weixin_42348049/article/details/80773886
今日推荐
周排行