C语言字符串数字提取函数,支持负数、浮点数、科学记数法

目录

  • 效果
    • 普通数字
    • 小数
    • 科学记数法
  • 源码

平台:
STC89C52
Keil uVision V5.29.0.0
PK51 Prof.Developers Kit Version:9.60.0.0


效果

这里以51单片机为例,对串口接收的字符串中的第三个数进行解码:
在这里插入图片描述

在这里插入图片描述

普通数字

在这里插入图片描述

在这里插入图片描述

小数

在这里插入图片描述
在这里插入图片描述

科学记数法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

源码

/*
* Str2Num.h
*
*  Created on: 2021/11/6
*      Author: 乙酸氧铍
*/#ifndef STR2NUM_H_
#define STR2NUM_H_#include "stdint.h"/*
str:数字字符串首地址
flag:分隔符
no:第no个数字 从1开始计
Output: 输出结果
*/extern void str2int(char * str, char flag, int32_t no, int32_t *Output);
extern void str2double(char * str, char flag, int32_t no, double *Output);#endif /* STR2NUM_H_ */
/*
* Str2Num.c
*
*  Created on: 2021/11/6
*      Author: 乙酸氧铍
*/
#include "Str2Num.h"void str2int(char * str, char flag, int32_t no, int32_t *Output)
{int32_t id_end, count, output;for (id_end = 0, count = 0; count != no; ++id_end){if (str[id_end] == flag || str[id_end] == '\r' || str[id_end] == '\n' || str[id_end] == '\0')++count;}id_end -= 2;for (output = 0, count = 1; str[id_end] != flag && id_end >= 0; --id_end){ if (str[id_end] == '-')output *= -1;else if (str[id_end] == '+');else {output += (str[id_end] - '0') * count;count *= 10;}}*Output = output;
}void str2double(char * str, char flag, int32_t no, double *Output)
{int32_t id_end, id_dot, id_e, count, id, pow;double output;for (id_end = 0, count = 0; count != no; ++id_end){if (str[id_end] == flag || str[id_end] == '\r' || str[id_end] == '\n' || str[id_end] == '\0')++count;}id_end -= 2;	//寻找最后一个数字的下标for (id_dot = id_end, id_e = -1; str[id_dot] != '.'; --id_dot){if (str[id_dot] == 'e' || str[id_dot] == 'E')id_e = id_dot;			//标记e的下标if (str[id_dot] == flag || str[id_dot] == '\r' || str[id_dot] == '\n' || str[id_dot] == '\0'){if(id_e > 0)id_dot = id_e;elseid_dot = id_end + 1;	break;}}output = 0;if (str[id_dot] == '.'){for (count = 10, id = id_dot + 1; str[id] != flag && str[id] != '\r' && str[id] != '\n' && str[id] != '\0' && str[id] != 'e' && str[id] != 'E'; ++id){output += (str[id] - '0') / (double)count;	//加入小数部分count *= 10;}}for (count = 1, id = id_dot - 1; str[id] != flag && id >= 0; --id){if (str[id] == '-')output *= -1;else if (str[id] == '+');else{output += (str[id] - '0') * count;count *= 10;								//加入整数部分}}if(id_e > 0)										//指数计算{ for (pow = 0, count = 1; id_end != id_e; --id_end){if (str[id_end] == '+');else if (str[id_end] == '-')pow *= -1;else { pow += (str[id_end] - '0') * count;count *= 10;}}if (pow > 0)while (pow--)output *= 10;else if(pow < 0)while (pow++)output /= 10;}*Output = output;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400539.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分享代码参数说明

微博&#xff0c;qq好友&#xff0c;qq空间分享代码参数说明&#xff1a; // 分享到新浪 ralateUid是微博账号id $(#sina).click(function(){window.open(http://service.weibo.com/share/share.php?url shareUrl &typeicon&ralateUid5547347718&languagez…

eclipse编译hadoop插件

2019独角兽企业重金招聘Python工程师标准>>> 准备 eclipse ant1.8.0 hadoop1.2.1 src 步骤 1. 修改/home/hadoop/hadoop-1.2.1/src/contrib/build-contrib.xml 修改hadop.root值为实际的hadoop根目录 <property name"hadoop.root" location"…

【51单片机快速入门指南】1:基础知识和工程创建

目录简介命名规则51单片机的数据类型总表扩展数据类型stdint.h存储器类型关键字烧录工具工程的创建创建项目添加C文件配置工程存储模式配置输出配置代码优化配置编译烧录普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 简介 51…

编译器预定义宏的查看和使用

1、查看不同编译器的预定义宏&#xff08;内建宏定义&#xff09;&#xff1a; http://nadeausoftware.com/articles/2011/12/c_c_tip_how_list_compiler_predefined_macros 2、如何使用编译器预定义宏检测操作系统类型 http://nadeausoftware.com/articles/2012/01/c_c_tip_ho…

js兼容性——获取当前浏览器窗口的宽高

通过onresize事件 1 window.onresize function () {2 document.title client().width " " client().height;3 }4 5 6 //获取屏幕可视区域的宽高7 function client(){8 if(window.innerHeight ! undefined){9 return { 10 "wid…

请不要做浮躁的嵌入式系统工程师(谨以此文与大家共勉)

2019独角兽企业重金招聘Python工程师标准>>> 1. 不要看到别人的回复&#xff0c;第一句话就说&#xff1a;给个代码吧&#xff01;你应该想想为什么。当你自己想出来再参考别人的提示&#xff0c;你就知道自己和别人思路的差异。 2. 初学者请不要看太多的书那会误人…

【51单片机快速入门指南】2:GPIO LED与按键

目录硬知识概念I/O口配置准双向口/弱上拉输出配置开漏输出配置实战延时函数的生成闪烁一个LED灯源码实验现象流水灯源码实验现象按键控制LED灯按键介绍源码实验现象普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 概念 …

图片视频预览开启和关闭脚本 Xp

关闭缩略图 regsvr32 /u shmedia.dll开启缩略图 regsvr32 shmedia.dll 关闭缩略图 regsvr32 /u shimgvw.dll开启缩略图 regsvr32 shimgvw.dll 如果还是不行&#xff0c;请安装 K-Lite Codec Pack 解码器 注册表相关 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.…

菜鸟Linux攻略--目录文件权限的查看和修改(详细)

为什么80%的码农都做不了架构师&#xff1f;>>> 链接&#xff1a;http://zhaoyuqiang.blog.51cto.com/6328846/1214718 转载于:https://my.oschina.net/L110/blog/402042

【51单片机快速入门指南】2.1:数码管显示数字、小数 (科学计数法)

目录硬知识数码管简介多位数码管简介数码管动态显示原理74HC245 芯片简介74HC138 芯片简介上机实战源码Tube.cTube.hmain.c效果显示整数正数负数显示小数&#xff08;保留三位有效数字&#xff09;正数负数普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Develop…

jmeter 插件 监视器 图形界面使用

http://www.cnblogs.com/zhaoxd07/p/5197669.html转载于:https://www.cnblogs.com/kaka1988/p/7148554.html

防USB病毒

Windows XP 需要用此步驟。Windows 7 就不需要了。 步驟1. 於「開始/執行」中執行 regedit&#xff0c;進入登錄編輯程式。2. 找到機碼名稱: HKEY_CURRENT_USER\Software\microsoft\Windows\CurrentVersion\Explorer\MountPoints23. 點選該機碼&#xff0c;按右鍵選擇「使用權限…

项目案例分享四:DC升级后Sysvol停止复制,日志报13508

最近在240个站点AD升级项目过程中遇到个别DC升级后Sysvol里面的内容同步到一半就不动了&#xff0c;连续一个星期都没有动静&#xff0c;今天在此跟大家分享此问题的处理方法。1.环境介绍其中DC01和DC02是中国总部的DC&#xff0c;中国地区其他两百多站点通过KCC生成的链路和DC…

【51单片机快速入门指南】2.2:任意位/任意长度数码管显示数字、小数

目录源码Tube.cTube.hmain.c效果8位数码管正整数负整数正小数负小数6位数码管正整数负整数正小数负小数4位数码管正整数负整数正小数负小数普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 源码 移植时主要只修改Tube_Num数量、…

【bzoj4025】二分图 LCT

题目描述 神犇有一个n个节点的图。因为神犇是神犇&#xff0c;所以在T时间内一些边会出现后消失。神犇要求出每一时间段内这个图是否是二分图。这么简单的问题神犇当然会做了&#xff0c;于是他想考考你。输入 输入数据的第一行是三个整数n,m,T。第2行到第m1行&#xff0c;每行…

世界500强高频逻辑推理智力面试题(一)

1、有一堆垃圾&#xff0c;规定要由张王 李三户人家清理。张户因外出没能参加&#xff0c;留下&#xff19;元钱做代劳费。王户上午起早干了&#xff15;小时&#xff0c; 李户下午接着干了&#xff14;小时刚好干完。问王户和李户应怎样分配这&#xff19;元钱&#xff1f; 答…

【51单片机快速入门指南】2.3:GPIO读取矩阵键盘 8个IO读16键

目录硬知识矩阵键盘介绍测试程序Key_Board.cKey_Board.hmain.c实验现象普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 选自《普中51单片机开发攻略_V1.2》 矩阵键盘介绍 独立按键与单片机连接时&#xff0c;每一个按键…

wordpress数据库表详解

表名&#xff1a;wp_commentmeta 仅存储Akismet或手工审核的评论是否为垃圾评论的判断结果。 字段注释meta_id自增唯一IDcomment_id对应评论IDmeta_keymeta_value表名&#xff1a;wp_comments 存储评论信息&#xff0c;如评论内容、评论所属文章、评论人昵称、邮箱、URL等&…

搭建LAMP

RPM包和源码包存放位置 /usr/local/src源码包编译安装位置 /usr/local/apache/usr/local/mysql/usr/local/php默认MySQL 数据库位置 /usr/local/mysql/var默认网站根目录 /usr/local/apache/htdocs2 LAMP环境搭建搭建的工作包括 mysql、apache、PHP。可以按照这个顺序来搭建环境…

JavaScript 计时器

1.定义计时器 (1).setInteral(函数名或代码,时间间隔). 注&#xff1a;每隔你定义的时间间隔执行一次你定义的函数或代码。 (2).setTimeout(函数名或代码,时间间隔). 注&#xff1a;setTimeout();严格意义上说不是定时器&#xff0c;它只是让代码延后执行&#xff0c;只会执行一…