首页 > 编程知识 正文

gpgga数据解析,gpon协议栈

时间:2023-05-06 16:17:30 阅读:265314 作者:1282

//用C语言解析#include<stdio.h> #include<string.h> #include<iostream> using namespace std;void main(){char a[100] = "$GPGGA,061820.132,2844.3546,N,11551.8844,E,1,10,0.8,57.9,M,-5.6,M,,0000*6c<CR><LF>";// 举例char* str[15];// 定义十五个指针数组,将所有的信息提取出来int i = 0;// 循环变量,以指定各字符指针char* flag;// 用于寻找桢头 $GPGGA,并进行判断char* pold;// 用来放先前指针指向在字符串中某个特定位置char* pnew;// 用来放后来指针指向的位置int num = 0;// 两个字符如两个逗号之间的位置flag = strstr(a, "$GPGGA");// 在 a 中寻找子串"$GPGGA",并记录位置if (flag == NULL)// 若没有找到桢头 "$GPGGA",则出错{printf(" 出错了! rn");}for (i = 0, pold = flag; i < 13; i++){pold = strstr(pold, ",");// 前面十三个数据都可以pnew = strstr(pold + 1, ",");num = pnew - pold - 1;cout << num << endl;str[i] = new char[num + 1];// 为 Time 多分配一个内存,以放最后的结束符if (!str[i])// 判断内存分配是否成功{delete[]str[i];}memcpy(str[i], pold + 1, num);// 将 a 字符串的相关字符传给 Time str[i][num] = '';// 在 Time 最后加上一个结束符pold = pnew;cout << str[i] << endl;}//i=13 pnew = strstr(a, "*");num = pnew - pold - 1;str[i] = new char[num + 1];// 为 Time 多分配一个内存,以放最后的结束符if (!str[i])// 判断内存分配是否成功{delete[]str[i];}memcpy(str[i], pold + 1, num + 1);// 将 a 字符串的相关字符传给 Time str[i][num] = '';// 在 Time 最后加上一个结束符cout << str[i] << endl;i += 1;pold = pnew;// 在 a 中寻找子串 "$GPGGA",并记录位置str[i] = new char[3];// 为 Time 多分配一个内存,以放最后的结束符if (!str[i])// 判断内存分配是否成功{delete[]str[i];}memcpy(str[i], pold + 1, 2);// 将 a 字符串的相关字符传给 Time str[i][2] = '';// 在 Time 最后加上一个结束符cout << str[i] << endl;int result = a[1];for (i = 2; a[i] != '*'; i++){result ^= a[i];}printf("result=%xn", result);}// 此时调单步可以看到将每个数据都用一个字符指针获取了

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。