//检测逗号位置的函数,buf是需要检测的字符串,cx是要检测第几个逗号
u8 NMEA_Comma_Pos(u8 *buf,u8 cx)
{               u8 *p=buf;while(cx){        if(*buf==',')cx--;buf++;if(*buf=='*'||*buf<' '||*buf>'z')return 0XFF;//遇到‘*’,和非法字符就返回0xff}return buf-p;
}//m^n函数
//返回值:m^n
u32 NMEA_Pow(u8 m,u8 n)
{u32 result=1;  while(n--)result*=m;    return result;
}//str转换位数字,以‘,’或者‘*’结束
//buf:str存储区
//dx:小数点位数,返回给调用函数
//返回值:转换位长整形
int NMEA_Str2num(u8 *buf,u8*dx)
{u8 *p=buf;u32 ires=0,fres=0;u8 ilen=0,flen=0,i;u8 mask=0;int res;while(1) //得到整数和小数的长度{if(*p=='-'){mask|=0X02;p++;}//是负数if(*p==','||(*p=='*'))break;//遇到‘,’或者‘*’结束if(*p=='.'){mask|=0X01;p++;}//遇到小数点else if(*p>'9'||(*p<'0'))    //有非法字符{    ilen=0;flen=0;break;} if(mask&0X01)flen++;else ilen++;p++;}if(mask&0X02)buf++;    //去掉负号for(i=0;i<ilen;i++) //得到整数部分数据{  ires+=NMEA_Pow(10,ilen-1-i)*(buf[i]-'0');}if(flen>5)flen=5;    //最多取5位小数*dx=flen;         //小数点位数for(i=0;i<flen;i++)    //得到小数部分数据{  fres+=NMEA_Pow(10,flen-1-i)*(buf[ilen+1+i]-'0');} res=ires*NMEA_Pow(10,flen)+fres;if(mask&0X02)res=-res;         return res;
}                                //数据解析
void Analysis(u8 *buf)
{u8 *p1,dx;          u8 posx;   long int temp;     float rs;    p1=(u8*)strstr((const char *)buf,"ZCPOS");  //判断字符串ZCPOS是否是buf的子串,不是就返回空posx=NMEA_Comma_Pos(p1,1);  //返回字符串第一个逗号的位置if(posx!=0XFF){temp=NMEA_Str2num(p1+posx,&dx);  //返回整数和,逗号在字符串的位置12.33 则temp=1233,dx=2 GPS_lat =(double) temp/NMEA_Pow(10,dx); }posx=NMEA_Comma_Pos(p1,2); // 返回字符串第二个逗号的位置if(posx!=0XFF){temp=NMEA_Str2num(p1+posx,&dx);     GPS_long = (double)temp/NMEA_Pow(10,dx); }posx=NMEA_Comma_Pos(p1,3);  // 返回字符串第三个逗号的位置if(posx!=0XFF){temp=NMEA_Str2num(p1+posx,&dx);       GPS_direction=(double)temp/NMEA_Pow(10,dx);}
}

举例:*buf = {“ZCPOS,123.56,789.23,546.72,”}

得到:GPS_lat = 123.56   GPS_long = 789.23  GPS_direction=564.72

串口接收数据转换成double型相关推荐

  1. LabVIEW系列—将串口二进制数据转换成ASCII字符

    接下来就一步一步地解决以上两个问题: 1.LabVIEW中,字符控件显示字符有4种方式:正常显示,'\'代码显示,密码显示,十六进制显示.如下图所示. 下图是LabVIEW的help的ASCII码对照 ...

  2. python double转int_如何将int转换成double

    展开全部 将int转换成double可以使用强制62616964757a686964616fe59b9ee7ad9431333431353431类型转换.自动类型转换两种方式. 1.强制类型转换 强制 ...

  3. 将串口接收的数据绘制成波形图(使用matlab或Visual Scope)

    一. 串口通信配置 结合stm32固件库(或其它类型单片机)中usart相关的函数,配置好串口通信的寄存器,确定(数据位.停止位.波特率等等),本文主要介绍两种方法将采集到的串口数据绘制成波形图. 二 ...

  4. 串口接收到的字符型数据如何转化成数字

    串口接收到的字符型数据转化成数字: k = USART_RXBuff[3]-0x30; 或者: k = USART_RXBuff[3]-'0';

  5. Arduino 从串口接收到的数据中提取整型数据(parseInt)

    Arduino 从串口接收到的数据中提取整型数据(parseInt) 函数说明 parseInt函数可用于从设备接收到的数据中寻找整数数值. 该函数属于Stream类.该函数可被Stream类的子类所 ...

  6. java 把char转换成int型,java如何把char型数据转换成int型数据(转)

    一字符串,String="2324234535": 把第i个数取出来时是char型的:char temp=String.charAt(i) 如何把char型转换成int型? 我需要 ...

  7. C语言 字符串转换成int、long和double型

    #include <stdio.h> #include <stdlib.h> #define LENGTH 128int main(void){char str[LENGTH] ...

  8. linux 串口 lsr 0xc9,串口发送0x0D后,从串口接收到数据被转换成了0x0A

    如题,在追踪串口中断接收字符接口UART_getc()    到底层,其调用的是 typedef int32_t     (*UART_ReadPollingFxn)    (UART_Handle ...

  9. UART0串口编程(六):串口(UART0)之UC/OS(二)UC/OS下的串口接收任务编程

    串口(UART0)之UC/OS(二) 一.串口接收数据在UC/OS设计中应注意的问题 1.    串口通信的数据接收过程: 1>  UART 接收FIFO接收到预定字节后触发中断 2>   ...

最新文章

  1. MogileFS高级应用(二)最后有疑问
  2. 如何以类似JSON的格式打印圆形结构?
  3. html多条件检索折叠,八种方式实现多条件匹配
  4. 近乎于“妖”!浅谈《山海镜花》的美术风格与设计
  5. linux之lsof和netstat判断端口(port)被哪些应用占用
  6. Wireshark个人实战总结
  7. 【LeetCode】剑指 Offer 10- I. 斐波那契数列
  8. spark学习-54-Spark RDD的clean()方法
  9. Linux之web服务
  10. Atitit mvc框架的实现 目录 1.1. class MvcCtrol { 1 1.2. MvcFilter 1 1.3. MvcUtil 2 /springboothelloword/sr
  11. 设计和实现一款轻量级的爬虫框架
  12. 服务器误删除虚拟机数据恢复成功
  13. python教程马哥_【60集全】全新马哥教育 运维必备python基础语法全讲解_IT教程网...
  14. ubuntu提示根目录存储空间不足的解决办法
  15. 面向大数据的分布式调度
  16. 4种超好用的PS调色小技巧,知道的人不多!
  17. Ajax洗洁精的特性,洗涤剂中常用表面活性剂的特点
  18. 视频文件头解析--wma
  19. 【在线笔试题解题报告系列】Google APAC 2017 University Test Round B
  20. 高通batterydata电池曲线数据学习

热门文章

  1. bzoj2127 happiness 最小割
  2. bzoj3203 [Sdoi2013]保护出题人 凸包+二分
  3. 2017.4.22 hankson的趣味题 思考记录
  4. win7为什么打开桌面上的计算机很卡很慢,Win7系统运行不流畅卡半天才进入桌面的六种解决方法...
  5. 打开stl文件_介绍一种修复、查看以及打印STL三维模型文件的工具
  6. 网络互连与互联网知识点笔记(五)---路由器技术
  7. python十进制转化为二进制_十进制转化为二进制的Python 3.2 代码
  8. [转]在Windows server 2012上部署DPM 2012 SP1 RTM之安装配置
  9. SpringBoot面试题及答案整理
  10. UIButton的几种触发方式