GPS数据处理

#include

#include

//十六进制转十进制 int transformation(char *p)//p指主函数的data { int sum = 0; int length = strlen(p); int control = 1;//length是元素长度,要减去一才是最后的字符 int shiliu_cifan=0;//用于表示16的n次方 //进行2次循环 for (int count = 0;count <2;count++) { int number = p[length - control];//当不是十六进制的字母时,number就是十六进制的数字 switch (number) {//字符串的“123”不是整型的123 case (int)'A': number = 10; break; case (int)'B': number = 11; break; case (int)'C': number = 12; break; case (int)'D': number = 13; break; case (int)'E': number = 14; break; case (int)'F': number = 15; break; case (int)'0': number = 0; break; case (int)'1': number = 1; break; case (int)'2': number = 2; break; case (int)'3': number = 3; break; case (int)'4': number = 4; break; case (int)'5': number = 5; break; case (int)'6': number = 6; break; case (int)'7': number = 7; break; case (int)'8': number = 8; break; case (int)'9': number = 9; break; } control++;//让下一次循环,进行switch(最后第二个字符)

    //乘16,转化为十进制
    int control_1;
    for ( control_1= 0;control_1 <shiliu_cifan;control_1++) {
        number*=16;
    }
    shiliu_cifan++;

    sum+=number;
}

return sum;

}

//输入语句,检索其是否传输正确,正确返回1,错误返回0 int determine_yihuo(char p)//p指主函数的data { int count = 2; int result = p[1]; while (p[count] != '') { result ^= p[count]; count++;//结束时,count即*的下标 }

int determine = 0;//定义初始结果为传输错误
if (result == transformation(p)) {
    determine = 1;
}

return determine;

}

//输出北京时间 void BJ_time(char p)//p指主函数的data { int UTC_xiabiao = strspn(p,"$GPRMC");//UTC_xiabiao指$GPRMC后方的逗号的下标 int hours = 0,minute = 0,sound = 0; int count_1 = 1;//count_1指循环次数,也指hh:mm:ss中的第几个数 int number_1;//number_1用来存储p[UTC_xiabiao+count_1]转化为int型的单个数字 while (p[UTC_xiabiao+count_1] != '.') { switch ((int)p[UTC_xiabiao+count_1]) {//switch用于转化字符串“123”为int型123 case (int)'0': number_1 = 0; break; case (int)'1': number_1 = 1; break; case (int)'2': number_1 = 2; break; case (int)'3': number_1 = 3; break; case (int)'4': number_1 = 4; break; case (int)'5': number_1 = 5; break; case (int)'6': number_1 = 6; break; case (int)'7': number_1 = 7; break; case (int)'8': number_1 = 8; break; case (int)'9': number_1 = 9; break; } //得动UTC时间 if (count_1 <3) { hours = hours10+number_1; } else if (count_1 <5) { minute = minute10+number_1; } else if (count_1 <7) { sound = sound10+number_1; }

    count_1++;
}

//输出北京时间
if (hours + 8 <24 ) {
    if (hours+8 >=0 && hours+8 <10) {
        printf("0%d:",hours+8);
    } else {
        printf("%d:",hours+8);
    }

    if (minute >=0 && minute <10) {
        printf("0%d:",minute);
    } else {
        printf("%d:",minute);
    }

    if (sound >=0 && sound <10) {
        printf("0%d",sound);
    } else {
        printf("%d",sound);
    }
} else {
    if (hours+8-24 >=0 && hours+8-24 <10) {
        printf("0%d:",hours+8-24);
    } else {
        printf("%d:",hours+8-24);
    }

    if (minute >=0 && minute <10) {
        printf("0%d:",minute);
    } else {
        printf("%d:",minute);
    }

    if (sound >=0 && sound <10) {
        printf("0%d",sound);
    } else {
        printf("%d",sound);
    }
}

}

int main(void) { char data[1000]; scanf("%999s",data); while (strcmp(data,"END") != 0) { if (strstr(data,"$GPRMC") == NULL) { scanf("%s",data); continue; } else { if (determine_yihuo(data)) {//判断校验是否正确 if (strchr(data,'V') == NULL) {//判断定位是都成功 BJ_time(data); } } }

    scanf("%s",data);
}

return 0;

}

JSRUN前端笔记, 是针对前端工程师开放的一个笔记分享平台,是前端工程师记录重点、分享经验的一个笔记本。JSRUN前端采用的 MarkDown 语法 (极客专用语法), 这里属于IT工程师。