GPGGA是NMEA协议下的数据包,是GPS数据输出格式语句,是一帧GPS定位的主要数据,也是NMEA格式使用最广的数据之一。该语句包括17个字段。

例如$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<CR><LF>$GPGGA,021850.00,2233.51747,N,11356.58160,E,1,09,0.97,69.2,M,-2.7,M,,*7A

<1> UTC时间,hhmmss(时分秒)格式
<2>纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
<3> 纬度半球N(北半球)或S(南半球)
<4> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
<5> 经度半球E(东经)或W(西经)
<6> GPS状态:0=未定位,1=非差分定位,2=差分定位,6=正在估算 只有为1的时候为有效定位数据
<7> 正在使用解算位置的卫星数量(00~12)(前面的0也将被传输)
<8> HDOP水平精度因子(0.5~99.9)
<9> 海拔高度(-9999.9~99999.9)
<10> 地球椭球面相对大地水准面的高度
<11> 差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)
<12> 差分站ID号0000~1023(前面的0也将被传输,如果不是差分定位将为空)
<13> 检验值

读取数据

纬度计算:2238.5260
(1) 2238.5260 ÷ 100 = 22(向下取整)
(2)385260 ÷ 60 = 6421
得到以°的纬度坐标22.6421°
经度同操作

#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <iostream>using std::string;
double getnum(const char *str, int star, int end)
{int len = end - star, index;double answer = 0, answer2= 0, answer3 = 0;bool flag = true;for (int i = star; i < end + 1 ; i++){//printf("char = %c, answer = %.4f, answer2 = %.4f\n", str[i], answer, answer2);if (str[i] == '.'){flag = false;index = i + 1;continue;}if (flag){answer = answer * 10 + (str[i] - '0');}else {answer2 = answer2 * 0.1 + (str[end - (i - index)] - '0');}}answer2 = answer2 * 0.1;answer3 = int(answer) % 100;answer = floor(answer / 100);printf("answer2 = %f , answer3 = %f\n", answer2, answer3);answer2 = (answer3+ answer2) / 60;return answer = answer + answer2;}
int main()
{std::cout << "Hello World!\n";const char* GPGGA = "$GPGGA,054514.000,2238.5260,N,11401.9686,E,1,7,1.27,89.2,M,-2.3,M,,*7F";uint8_t *p1;int len;len = strlen(GPGGA);p1 = (uint8_t*)strstr((const char *)GPGGA, "GPGGA"); // 查找字符串第一次出现“GPGGA”的位置if (p1 == NULL){printf("data is error!\n");}else{int sum = GPGGA[1];for (int i = 2; i < len - 5; i++){sum ^= GPGGA[i];}char buf[2];int k = sum / 16;printf("k = %d\n", k);if (k > 9 && k < 16){buf[0] = k - 9 + 'A';}else{buf[1] = k - 9 + '0';}int m = sum % 16;printf("m = %d\n", m);if (m > 9 && m < 16){buf[1] = m - 9 + 'A';}else{buf[1] = m - 9 + '0';}if (GPGGA[len - 4] == buf[0] || GPGGA[len - 3] == buf[1]){printf("无效\n");}else{int count = 0, save[20];//找到每一个逗号的位置  存储坐标for (int j = 0; j < len; j++){if (GPGGA[j] == ','){save[count] = j + 1;count++;}}double latitude = 0, longitude = 0;latitude = getnum(GPGGA, save[1], save[2] - 2);printf("latitude = %.6f \n", latitude);longitude = getnum(GPGGA, save[3], save[4] - 2);printf("longitude = %.6f\n", longitude);}}return 0;
}

NMEA的GPGGA数据包解析 字符转数字相关推荐

  1. GPS NMEA数据包解析

    GPS NMEA数据包解析 NMEA-0183是美国国家海洋电子协会为海用电子设备制定的标准格式.它包含了定位时间,纬度,经度,高度,定位所用的卫星数,DOP值,差分状态和校正时段等很多信息 一 通用 ...

  2. wireshark官方文档第 9 章数据包解析

    第 9 章数据包解析 9.1. 数据包解析的工作原理 对于一个已封装好的协议包,每个解析器(dissector)对其负责的一部分协议进行解码,然后将解码过程交给后续的解析器. 每个解析都从帧(Fram ...

  3. java 解析数据包_一种基于Java语言的网络通讯数据包解析方法与流程

    本发明涉及网络通讯领域,特别涉及一种基于Java语言的网络通讯数据包解析方法. 背景技术: 计算机系统和网络的大量普及使用使全球跨入了信息化时代.但是,正由于现代社会中几乎一切都在"计算机化 ...

  4. 搬砖:网络数据包解析

    Itsad 网络数据包解析 TCP/IP协议数据包,一般由应用层.传输层.网络层.数据链路层封装而成. 四层协议各自的作用: 数据链路层实现了网卡接口的驱动程序. 网络层实现了数据包的选路和转发. 传 ...

  5. Tracert命令 路由跟踪数据包解析

    Tracertet 命令作为一个路由跟踪.诊断实用程序,在DOS和UNIX系统下都有此命令,它通过发送 Internet 控制消息协议 (ICMP) 回显请求和回显答复消息,产生关于经过每个路由器的命 ...

  6. HDLBITS笔记35:独热编码状态机,ps/2数据包解析器,ps/2数据包和数据路径

    目录 题目1:Fsm onehot(热编码的有限状态机) 题目2:Fsm ps2(ps/2数据包解析器) 题目3:Fsm ps2data(ps/2数据包解析器和数据路径) 题目1:Fsm onehot ...

  7. ryu实例---数据包解析

    本文章基于https://ryu.readthedocs.io/en/latest/library_packet.html里面的Packet library的内容进行讲解的,即数据包解析的简单实现.r ...

  8. jpcap抓包,TCP数据包逻辑分析,TCP数据包解析

    1.jpcap抓包 https://github.com/kumqu/java-jpcap 2.TCP逻辑分析 3.TCP数据包解析 3.1 数据包解析源码 import com.alibaba.fa ...

  9. 计算机网络ip数据包分析题,计算机网络课程设计-IP数据包解析实验报告

    计算机网络课程设计-IP数据包解析实验报告 解析 IP数据报实验报告目录目录 21.课程设计目的 .22.课程设计要求 .23.相关知识 .24.课程设计分析 .64.1 网卡设置64.2 使用套接字 ...

  10. python网络数据包分析_Pyshark:使用了WirdShark的Python数据包解析工具(Tshark)

    Pyshark Pyshark是一款针对tshark的Python封装器,在Pyshark的帮助下,广大研究人员可以使用wireshark的解析器来进行Python数据包解析.扩展文档:[Pyshar ...

最新文章

  1. MyEclipse图表工具Birt的使用技巧(三)--连接webservice数据源
  2. 服务器拒绝接收office文件,Ghost Win7系统下Outlook设置拒绝接收垃圾文件的方法
  3. OpenGL Multi-Indirect Draw小行星的实例
  4. Zookeeper 客户端API调用示例(基本使用,增删改查znode数据,监听znode,其它案例,其它网络参考资料)
  5. Vue 媒体处理(摄像头,截图,播放本地视频)
  6. 毕业2年,我的工作小结
  7. 小程序开发教程 | 来自小程序开发者的实例教程
  8. 计算机组成原理 王道考研2021 第一章:计算机组成原理概述 -- 计算机硬件的基本组成、认识各个硬件部分
  9. java代码混淆-ProGuard
  10. CentOS7镜像安装与下载
  11. 微信公众号推送模板消息,推送个人消息,给指定的人发送模板消息
  12. ESP8266-Arduino编程实例-BME280环境传感器驱动
  13. ctype.h 函数介绍
  14. 2019第一季度工作总结
  15. $timeout、$interval和$watch用法
  16. 使用dom4j读写xml实例
  17. java马里奥_java马里奥毕业设计
  18. oracle远程投毒漏洞复现,oracle TNS Listener远程投毒(CVE-2012-1675)漏洞分析、复现...
  19. linux删文件,捋一捋
  20. 悼念王选:伟大发明家和失意企业家间的孤独者(2006.03.13 来自:IT时代周刊)

热门文章

  1. java详细设计模式有代码
  2. docker中安装Nexus3
  3. python 运行另一个py_如何在python中执行另一个py文件
  4. 微信小程序生命周期钩子函数
  5. 学校题库管理系统需求分析
  6. Hardware概述
  7. 最浅显的IE反劫持攻略(转)
  8. java商城系统设计—竞拍
  9. phpcms v9模板制作教程(转载)
  10. 阿里巴巴的26款超神Java开源项目!