GPS数据处理

#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;
}

猜你喜欢

转载自blog.csdn.net/weixin_42348049/article/details/80773886