c/c++字符串转数字的库函数
一.C库函数:
头文件:
#include<stdlib.h>或#include<cstdlib>
1.1 char*转int/long:
long int strtol(const char *nptr, char **endptr, int base)
该函数将从nptr开始,跳过空格,找到'+','-'或者数字开始转换,直到找到第一个不合法字符为止。将这些数转化为long。如果nptr指向的字符串是非法字符串那么将无法转换。字符串可以没有'+','-'符号。
第一个参数为需要转long的字符串,第二个参数一般设为NULL,不为空则endptr将得到第一个非法字符的地址。第三个参数表示进制,支持2-36进制。
非法字符判定与进制有关。如为2进制则合法字符为'0'-'1',十进制则为'0'-'9',十六进制为'0'-'9','a'-'f','A'-'F'。10+进制的字符串不区分大小写,即'a'与'A‘均合法。
不同的编译器long和int长度有区别。因此得到int值时有时需要考虑是否把返回的long结果转换。
例:
int a(0);
long b(0);
char str1[]="12345";
char str2[]="2A";
char str3[]="123 126";
//第二个参数为空的情况
a=(int)strtol(str1, NULL, 10);//a=12345
b=strtol(str2,NULL,16);//b=42
//第二个参数不为空,则我们可以如下使用
char* p=str3;
a=(int)strtol(p, (char**)&p, 10);//此时p指向str[3],值为空格。a=123
b=strtol(p,(char**)&p,10);//自动跳过空格。b=126
//这样可以得到两个数。如果字符串里面数字过多可以加循环
1.2 char*转float/double:
char*转float:
float strtol(const char *nptr, char **endptr);
char*转double:
double strtod(const char *nptr, char **endptr);
与1.1相比,这两个函数只支持10进制。其它与1.1基本相同,用法相似。
例:
float a(0);
double b(0);
char str1[]="123.45";
char str2[]="123.12 126.21";
//第二个参数为空的情况
a=strtof(str1, NULL);//a=123.45
b=strtod(str2,NULL);//b=123.45
//第二个参数不为空,则我们可以如下使用
char* p=str3;
a=strtof(p, (char**)&p);//a=123.12
b=strtod(p,(char**)&p);//b=126.21
1.3 其它转换:
标准库支持char*转long long,long double等。也有相应函数,用法与这些相似。
转化为long long为strtoll,转化为long double为strtold。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理