c语言 字符串转浮点型函数
写了一个将字符串转换为浮点型的函数,用于上位机与单片机的数据传输。该函数只需传入一个字符串数组(指针)与一个用于存放转换数据的double类型的数组,即可完成数据的转换。该函数可以输入任意长度的字符串(包含任意个数的浮点数)并且对任意浮点数都有效(无论正负与位数多少),只需在每个浮点数之间用逗号隔开,并且在结尾处加上分号结束。
以下是代码:
1、声明
//参数的含义:*string:包含数字信息的字符串,数字之间需要用逗号隔开,结尾为分号,如:11.2,-23.6,63.5;
//*data:储存转换后数据的数组.
void string_to_float(char *string, double *data);
2、函数
#include "math.h"void string_to_float(char *string, double *data)
{unsigned int i=0,j=0,k=0;unsigned char flag=0; //判断正负号的标志unsigned char flag_dot=1; //判断小数点的标志double num=0; //临时存储计算结果的变量for(i=0;*(string+i)!=';';i++) //循环直到字符串结尾{if(*(string+i)>='0'&&*(string+i)<='9'&&flag_dot==1) //如果当前字符为数字且在小数点之前{if(j==0) num = num*pow(10,j)+(double)(*(string+i)-'0'); //运算并存储中间计算结果else num = num*pow(10,1)+(double)(*(string+i)-'0');j++;}else if(*(string+i)>='0'&&*(string+i)<='9'&&flag_dot==0) //如果当前字符为数字且在小数点之后{num = num+(double)(*(string+i)-'0')*pow(0.1,j+1); //运算并存储中间计算结果j++;}else if(*(string+i)=='.') //读到了小数点则将对应标志位数值改变{flag_dot=0;j=0;}else if(*(string+i)=='-') //读到减号同样改变对应标志位的值{flag = 1;}else if(*(string+i)==',') //读完一个数据,重置标志位,记录最终计算结果{*(data+k) = num*pow(-1,flag);flag = 0;flag_dot=1;j=0;k++;num = 0;}}*(data+k) = num*pow(-1,flag); //补上最后一个数
}
该函数完全匹配正点原子的串口接收代码,只需要将存储接收数据的数组指针USART_RX_BUF传入函数即可。代码如下
if(USART_RX_STA&0x8000){ if (USART_RX_BUF[0]=='M'){string_to_float(USART_RX_BUF, data);
printf("%f,%f,%f,%f,%f,%f;\r\n",data[0],data[1],data[2],data[3],data[4],data[5]);USART_RX_STA=0;}}
这里的if (USART_RX_BUF[0]=='M')只是为了判断字符串数据帧的头部,不要也可,而且在字符串前面添加想要的数据头也不会影响计算结果,运行结果如下:
直接输入字符串也是一样的
string_to_float("-3.258,64.211,-118.38,-35.233,114503.258211,-2511235.3878;", data);
printf("%f,%f,%f,%f,%f,%f;\r\n",data[0],data[1],data[2],data[3],data[4],data[5]);
相关的头文件与.c文件也上传了,审核中。
c语言 字符串转浮点型函数相关推荐
- C.【转】C语言字符串与数字相互转换
1.gcvt 把浮点数转成字符串 - CSDN博客.html(https://blog.csdn.net/dxuehui/article/details/52791412) 1.1. 函数名: gcv ...
- c语言数字转化为字母表,c语言字符串 数字转换函数大全
转载:c语言字符串 数字转换函数大全 字符串数字转换到底什么意思呢: 字符串和数字的编码不一样,字符串是按照国际标准ASCII码表进行编码,每个数字都是一个8位的ASCII码(也就是一个字节大小):而 ...
- c语言中的字符串结束标志,c语言字符串结束标志是什么_后端开发
c语言如何求余数_后端开发 在C语言中可以直接使用双目运算符"%"求余数,其语法是"a%b",其中两个参数"a.b"必须为整形,不能为浮点型 ...
- C语言字符串处理的库函数
使用C语言字符串处理的库函数,务必包含头文件string.h,即#include <string.h> 1. 比较字符串大小函数 1) 忽略大小写---strca ...
- c语言作业 字符串替换,C语言字符串替换。解决方法
当前位置:我的异常网» C语言 » C语言字符串替换.解决方法 C语言字符串替换.解决方法 www.myexceptions.net 网友分享于:2015-04-14 浏览:0次 C语言字符串替换 ...
- 字符串基本操作 c语言,数据结构C语言字符串的基本操作.doc
数据结构C语言字符串的基本操作 串的基本操作 #include #include #include #define m 100 typedef struct{ char ch[m]; int leng ...
- c语言字符串文库总结,C语言字符串.ppt
C语言字符串.ppt ACM程序设计,福州大学至诚学院 冯新,第四讲,字符串处理,常用函数介绍,复制,char* strcpy char *s1, const char *s2; 将字符串s2复制到s ...
- c语言中的字符串总是以,C语言字符串的结束标志是什么?
多级反馈队列调度算法详解 通常在使用多级队列调度算法时,进程进入系统时被永久地分配到某个队列.例如,如果前台和后台进程分别具有单独队列,那么进程并不从一个队列移到另一个队列,这是因为进程不会改变前台或 ...
- C语言字符串中最后一个单词的长度的算法(附完整源码)
C语言字符串中最后一个单词的长度的算法 C语言字符串中最后一个单词的长度的算法完整源码(定义,实现,main函数测试) C语言字符串中最后一个单词的长度的算法完整源码(定义,实现,main函数测试) ...
- C语言字符串是否为pallindrome排列的算法(附完整源码)
C语言字符串是否为pallindrome排列的算法 C语言字符串是否为pallindrome排列的算法完整源码(定义,实现,main函数测试) C语言字符串是否为pallindrome排列的算法完整源 ...
最新文章
- 整数转换为罗马数字 Integer to Roman
- pytest框架安装(MacOS)
- socket sock inet_sock 等关系
- Drop Down ComboBox
- boost::geometry::srs::spar用法的测试程序
- app显示服务器借口错误,hbuider 运行 uni-app 电脑端安卓模拟器接口请求错误
- python控制鼠标_如何用python实现真实的鼠标移动?
- matlab可达矩阵 结果,matlab求可达矩阵
- a*算法流程图_B端产品如何画好流程图?
- 给定一个9位数字的ISBN,求其校验位
- 汉字,五笔,拼音的转换
- MySQL Oracle默认排序_PostgreSQL、MySQL、Oracle,查询的默认排序是怎样的?
- Jupyter notebook的主题和字体美化
- 关于Html class id 命名规范
- 【电子电路计算公式】 导线流过电流计算工具,我已经做成一个小工具了(源代码)
- 红帽认证工程师(RHCE)的发展前景
- git pull 与 git push 的区别
- com.mysql.jdbc.exceptions.MySQLSyntaxErrorException
- 利用python快速转换GenBank和RefSeq的染色体号
- 考研作文重点框架、句子、词汇总结