嵌入式Linux系统编程 — 4.6 atoi、strtol等函数实现字符串与数字转换

目录

1 字符串转整形数据

1.1 函数功能

1.2 示例程序

2  字符串转浮点型数据

2.1 函数介绍

2.2 示例程序

3 数字转字符串

3.1 函数介绍

3.2 函数原型


在编程中,经常会需要将数字组成的字符串转换为相应的数字、或者将数字转换为字符串,在 C 函数库中同样也提供了相应的函数, 本小节就向大家介绍这些函数的用法。

1 字符串转整形数据

1.1 函数功能

C 函数库中提供了一系列函数用于实现将一个字符串转为整形数据,主要包括 atoi()、 atol()、 atoll()以及strtol()、 strtoll()、 strtoul()、 strtoull()等。下面是每个函数的详细原型、作用和参数解释:

atoi() 函数:将字符串 str 转换为整型 (int) 数值。

atol() 函数:将字符串 str 转换为长整型 (long) 数值。

atoll() 函数:将字符串 str 转换为长长整型 (long long) 数值。

int atoi(const char *str);
long atol(const char *str);
long long atoll(const char *str);
  • str:指向待转换的以字符串形式表示的整数的字符数组。

strtol() 函数:将字符串 str 转换为长整型 (long) 数值,支持指定基数。

strtoll() 函数:将字符串 str 转换为长长整型 (long long) 数值,支持指定基数。

strtoul() 函数:将字符串 str 转换为无符号长整型 (unsigned long) 数值,支持指定基数。

strtoull() 函数:将字符串 str 转换为无符号长长整型 (unsigned long long) 数值,支持指定基数。

long strtol(const char *str, char **endptr, int base);
long long strtoll(const char *str, char **endptr, int base);
unsigned long strtoul(const char *str, char **endptr, int base);
unsigned long long strtoull(const char *str, char **endptr, int base);
  • str:指向待转换的字符串。
  • endptr:如果非空指针,函数在这里存储一个指向第一个无法进行转换的字符的指针。
  • base:数值基数,范围从2到36。如果为0,基数将从字符串中推断(例如,"0x"前缀表示16进制)。

1.2 示例程序

下面的示例程序使用 atoi()atol()atoll()strtol()strtoll()strtoul()strtoull() 函数将用户通过键盘输入的字符串转换为不同的整数类型。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main() 
{char input[256]; // 假设输入字符串不会超过255个字符// 提示用户输入一个字符串printf("请输入一个数字字符串:");fgets(input, sizeof(input), stdin); // 使用fgets读取一行输入input[strcspn(input, "\n")] = 0; // 去除末尾的换行符// 使用atoi转换字符串为intint intValue = atoi(input);printf("atoi转换结果为int类型:%d\n", intValue);// 使用atol转换字符串为longlong longValue = atol(input);printf("atol转换结果为long类型:%ld\n", longValue);// 使用atoll转换字符串为long longlong long longLongValue = atoll(input);printf("atoll转换结果为long long类型:%lld\n", longLongValue);// 使用strtol转换字符串为long,并可以获取剩余字符串char *endPtr;long strtolValue = strtol(input, &endPtr, 10); // 假设输入为十进制printf("strtol转换结果为long类型:%ld\n", strtolValue);// 使用strtoll转换字符串为long longlong long strtollValue = strtoll(input, &endPtr, 10); // 假设输入为十进制printf("strtoll转换结果为long long类型:%lld\n", strtollValue);// 使用strtoul转换字符串为unsigned longunsigned long strtoulValue = strtoul(input, &endPtr, 10); // 假设输入为十进制printf("strtoul转换结果为unsigned long类型:%lu\n", strtoulValue);// 使用strtoull转换字符串为unsigned long longunsigned long long strtoullValue = strtoull(input, &endPtr, 10); // 假设输入为十进制printf("strtoull转换结果为unsigned long long类型:%llu\n", strtoullValue);return 0;
}

运行结果如下: 

2  字符串转浮点型数据

2.1 函数介绍

atof()strtod()strtof()strtold() 是C语言标准库中用于将字符串转换为浮点数的函数。下面是这些函数的原型、作用、参数说明以及一个示例程序:

atof() 函数:将字符串转换为双精度浮点数 (double)。

strtod() 函数:将字符串转换为双精度浮点数 (double),可以获取剩余字符串。

strtof() 函数:将字符串转换为单精度浮点数 (float),可以获取剩余字符串。

strtold() 函数:将字符串转换为长双精度浮点数 (long double),可以获取剩余字符串。

函数原型如下:

double atof(const char *str);
double strtod(const char *str, char **endptr);
float strtof(const char *str, char **endptr);
long double strtold(const char *str, char **endptr);
  • str:指向待转换的以字符串形式表示的浮点数的字符数组。
  • endptr:如果非空指针,函数在这里存储一个指向第一个无法进行转换的字符的指针。

2.2 示例程序

程序提示用户输入一个数字字符串,接着使用 atof()strtod()strtof()strtold() 函数将字符串转换为不同的浮点数类型,并打印出转换后的值。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main() 
{char input[256]; // 用于存储用户输入的字符串// 提示用户输入字符串printf("请输入一个数字字符串:");fgets(input, sizeof(input), stdin);input[strcspn(input, "\n")] = 0; // 去除字符串末尾的换行符// 使用atof转换字符串,并打印结果double atofValue = atof(input);printf("atof转换结果:%f (double类型)\n", atofValue);// 使用strtod转换字符串,并打印结果及可能的剩余字符串char *endPtr;double strtodValue = strtod(input, &endPtr);printf("strtod转换结果:%f ,剩余字符串:%s\n", strtodValue, endPtr ? endPtr : "");// 使用strtof转换字符串,并打印结果及可能的剩余字符串float strtofValue = strtof(input, &endPtr);printf("strtof转换结果:%f ,剩余字符串:%s\n", strtofValue, endPtr ? endPtr : "");// 使用strtold转换字符串,并打印结果及可能的剩余字符串long double strtoldValue = strtold(input, &endPtr);printf("strtold转换结果:%Lf ,剩余字符串:%s\n", strtoldValue, endPtr ? endPtr : "");return 0;
}

运行结果如下: 

3 数字转字符串

3.1 函数介绍

sprintf()snprintf() 是C语言中用于格式化输出到字符串的函数。sprintf() 函数将格式化的数据写入到一个字符串中,而 snprintf() 函数提供了一种更安全的方式来执行相同的任务,因为它允许你指定最大写入的字符数,从而避免缓冲区溢出。

函数说明:

  • sprintf() 函数:根据指定的格式将数据写入到字符串中。
  • snprintf() 函数:类似于 sprintf(),但限制了写入的最大字符数。

函数原型:

int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
  • str:指向用于存储输出的字符串的指针。
  • format:格式字符串,定义了后续参数如何格式化。

3.2 函数原型

示例程序使用 sprintf()snprintf() 函数将用户通过键盘输入的数字格式化为字符串,程序首先提示用户输入一个数字和一个希望的输出字符串的最大长度。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_BUFFER_SIZE 100int main() 
{char buffer[MAX_BUFFER_SIZE]; // 存储格式化后的字符串double num; // 用户输入的数字,这里使用double以支持小数size_t size; // 用户希望的输出size(包括空字符终止符)// 提示用户输入一个数字printf("请输入一个数字(可以是整数或小数):");scanf("%lf", &num); // %lf用于读取double类型的数字// 清除缓冲区中的残留输入while (getchar() != '\n') continue;// 提示用户输入希望的输出sizeprintf("请输入希望的输出字符串的最大长度:");scanf("%zu", &size);// 检查size是否超出了buffer的最大大小size = size > MAX_BUFFER_SIZE ? MAX_BUFFER_SIZE : size;// 使用sprintf将数字格式化为字符串sprintf(buffer, "%.2f", num); // %.2f表示格式化为小数点后两位printf("使用sprintf格式化的字符串: %s\n", buffer);// 清空buffer以便重新使用memset(buffer, 0, sizeof(buffer));// 使用snprintf将数字格式化为字符串,指定最大输出sizesnprintf(buffer, size, "%.2f", num);printf("使用snprintf格式化的字符串: %s\n", buffer);return 0;
}

程序运行结果如下: 

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

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

相关文章

连环计 | 第6集 | 百姓有倒悬之危,君臣有累卵之急 | 貂蝉 | 三国演义 | 逐鹿群雄

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f4cc;这篇博客分享的是《三国演义》文学剧本第Ⅰ部分《群雄逐鹿》的第6️⃣集《连环计》的经典语句和文学剧本全集台词 文章目录 1.经典语句2.文学剧本台词 …

LabVIEW材料样本结构缺陷检测

本文介绍了一种基于LabVIEW的实验室振动特性分析测试装置&#xff0c;通过分析振动特性来检测结构缺陷。文章详细描述了具体案例、硬件型号、工作原理、软件功能以及注意事项。 硬件型号 振动传感器&#xff1a;PCB Piezotronics 352C33加速度计 数据采集卡&#xff1a;NI PXI…

python(基础语法,pandas,numpy,正则表达式,数据预处理)

python学习推荐网址&#xff1a; 白月黑羽 一、语法基础 目标&#xff1a; • list、tuple、set、dict的基本用法 • 内置函数 len&#xff08;&#xff09;&#xff0c; eval&#xff08;&#xff09;&#xff0c;range&#xff08;&#xff09;&#xff0c;sort&#xff08;…

Linux自动化交互脚本expect开发

在日常开发任务中&#xff0c;运行shell脚本有时候会提示输入密码的操作&#xff0c;如何让脚本自动输入密码呢&#xff1f;这时使用expect帮我们输入&#xff0c;Expect是基于Tcl发展而来的&#xff0c;它不仅可以进行交互&#xff0c;还可以根据程序的提示模拟标准输入&#…

西安高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

随着工业4.0时代的到来&#xff0c;智能制造成为推动制造业转型升级的关键。为了培养学生的创新能力和实践能力&#xff0c;西安高校大学决定建设智能制造实验室&#xff0c;并引入数字孪生技术&#xff0c;构建可视化系统平台。项目旨在通过数字孪生技术&#xff0c;实现对制造…

微信小程序毕业设计-线上教育商城系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

刷代码随想录有感(120):贪心算法——买卖股票的最佳时机

题干&#xff1a; 代码&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {int low INT_MAX;int res INT_MIN;for(int i 0; i < prices.size(); i){low min(low, prices[i]);res max(res, prices[i] - low);}return res;} }; 贪心…

ARCGIS添加在线地图

地图服务地址&#xff1a;http://map.geoq.cn/ArcGIS/rest/services 具体方法&#xff1a; 结果展示&#xff1a;

T4打卡 学习笔记

所用环境 ● 语言环境&#xff1a;Python3.11 ● 编译器&#xff1a;jupyter notebook ● 深度学习框架&#xff1a;TensorFlow2.16.1 ● 显卡&#xff08;GPU&#xff09;&#xff1a;NVIDIA GeForce RTX 2070 设置GPU from tensorflow import keras from tensorflow.keras…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] LYA的字符串拼接游戏(200分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

GO sync包——读写锁

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

多表查询实训

前提 本篇博客&#xff0c;我将通过讲解例题的方式&#xff0c;带大家进一步掌握多表查询的使用规则和使用技巧 正文 前提 先建好表 表1 salgrade (薪资等级表&#xff09; 表2 emp(员工信息表&#xff09; 表3 dept&#xff08;部门信息表&#xff09;&#xff0c;插入相…

docker-mysql主从复制

MySQL主从复制 安装docker和拉取镜像不再赘述 一.主服务器 1.新建主服务器容器-3307 &#xff08;这里设置的密码可能不生效&#xff0c;若未生效请看问题中的2&#xff09; docker run -p 3307:3306 --name mysql-master \ -v /mydata/mysql-master/log:/var/log/mysql \…

第三十七篇——麦克斯韦的妖:为什么要保持系统的开放性?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 如果没有详细的学习这篇文章&#xff0c;我觉得我就是被麦克斯韦妖摆弄的…

[机缘参悟-200] - 对自然、人性、人生、人心、人际、企业、社会、宇宙全面系统的感悟 - 全图解

对自然、人性、人生、人心、人际、企业、社会、宇宙进行全面系统的感悟&#xff0c;是一个极其深邃且复杂的主题。以下是对这些领域的简要感悟&#xff1a; 自然&#xff1a; 自然是人类生存的根基&#xff0c;它充满了无尽的奥秘和美丽。自然界的平衡和循环规律&#xff0c;教…

算法设计与分析--近似算法内容整理

文章目录 P、NP、NP-hard 和 NPC多项式时间概念区分NP-hard 的证明例题 1 证明 T S P TSP TSP 问题是 N P − h a r d NP-hard NP−hard 问题 。例题 2 证明最大加权独立集问题是 N P − h a r d NP-hard NP−hard 问题。 扩展 NP-hard 问题3-SAT 问题TSP 旅行商问题 Load B…

AI大模型的制造业场景,一文读懂

导读 如何认识这一轮AI技术发展影响的深度和广度&#xff1f;如何判断这一轮AI技术变革的性质&#xff1f; AI大模型是通用人工智能发展的重要里程碑。中央会议关于人工智能发展提出三个第一次&#xff1a;第一次提出“通用人工智能”&#xff0c;第一次提出“产业智能化”&a…

武汉星起航:激发中国卖家潜力,亚马逊减免政策共筑电商辉煌

在全球化电子商务的浪潮中&#xff0c;亚马逊作为全球领先的电商平台&#xff0c;一直致力于为卖家提供卓越的服务和支持。特别是对于中国卖家而言&#xff0c;亚马逊的减免优惠政策无疑是一股强大的助力&#xff0c;帮助他们在不断发展的市场中脱颖而出&#xff0c;实现业务的…

设计模式 - Observer Pattern 观察者模式

文章目录 定义观察者模式的实现构成构成UML图 观察者模式的代码实现场景代码实现 总结优点缺点应用场景 其他设计模式文章&#xff1a; 定义 观察者模式是行为型模式的一种&#xff0c;它定义对象间的一种一对多的依赖关系&#xff0c;使得每当一个对象改变状态&#xff0c;它…

MathType7.6专业数学公式编辑器!与Word、PPT等常用软件无缝对接。

MathType&#xff0c;一款专业的数学公式编辑器&#xff0c;以其强大的功能和友好的用户界面&#xff0c;在科研、教学等领域广受欢迎。它支持丰富的数学符号和公式模板&#xff0c;满足不同用户的需求。同时&#xff0c;MathType还提供了多种输出格式&#xff0c;方便与其他文…