atoi_atof_atol_strtod_strtol_strtoul

本文介绍C/C++中常用的字符串转换为数值的函数,包括strtoul、strtol、strtod、atof、atol及atoi的功能、用法及示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

头文件

#include< stdlib.h>
1. strtoul()  ---把字符串转成无符号长整型
定义函数
unsigned long strtoul(const char *nptr,char **endptr,int base);
函数说明:
strtoul()会将参数nptr字符串根据参数base来转换成无符号的 长整型数。
参数base范围从2至36,或0。
参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制数等。
当base值为0时会根据情况选择用哪种进制:
如果第一个字符是'0',就判断第二字符如果是‘x’则用16进制,否则用8进制;
第一个字符不是‘0’,则用10进制。
一开始strtoul()会扫描参数nptr字符串,跳过前面的空格字符串,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('')结束转换,并将结果返回。
若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符 指针由endptr返回。
返回值:
返回转换后的长整型数,否则返回ERANGE并将错误代码存入errno中。
附加说明:
ERANGE指定的转换字符串超出合法范围。
例子:
/* convert hex str "0xFF" to decimal 255 */

#include <stdio.h>
#include <stdlib.h>
int main()
{
        int a;
        char pNum[]="0xFF";

        a=strtoul(pNum,0,16);
        printf("%d\n",a);

        return 0;
}
运行结果:
$ ./a.out
255
2. strtol() -- 把字符串转成长整型
跟strtoul差不多, 只不过这是long型,而不是unsigned long型
long int strtol(const char *nptr,char **endptr,int base);
a. 不仅可以识别十进制整数,还可以识别其它进制的整数,取决于base参数,
比如:
strtol("0XDEADbeE~~", NULL, 16)返回0xdeadbee的值,
strtol("0777~~", NULL, 8)返回0777的值。
b. endptr是一个传出参数,函数返回时指向后面未被识别的第一个字符。
例如:
char *pos; strtol("123abc", &pos, 10);
strtol返回123,pos指向字符串中的字母a。
如果字符串开头没有可识别的整数,例如:
char *pos; strtol("ABCabc", &pos, 10);
则strtol返回0,pos指向字符串开头,可以据此判断这种出错的情况,而这是atoi处理不了的。
c. 如果字符串中的整数值超出long int的表示范围(上溢或下溢),则strtol返回它所能表示的最大(或最小)整数,并设置errno为ERANGE,例如strtol("0XDEADbeef~~", NULL, 16)返回0x7fffffff并设置errno为ERANGE
例子:
#include <stdlib.h>
#include <stdio.h>
void main( void )
{
        char *string, *stopstring;
        double x;
        int base;
        long l;
        unsigned long ul;

        string = "3.1415926This stopped it";
        x = strtod( string, &stopstring );
        printf( "string = %s\n", string );
        printf(" strtod = %f\n", x );
        printf(" Stopped scan at: %s\n\n", stopstring );

        string = "-10110134932This stopped it";
        l = strtol( string, &stopstring, 10 );
        printf( "string = %s\n", string );
        printf(" strtol = %ld\n", l );
        printf(" Stopped scan at: %s\n", stopstring );

        string = "10110134932";
        printf( "string = %s\n", string );
        /* Convert string using base 2, 4, and 8: */
        for( base = 2; base <= 8; base *= 2 ) {
                /* Convert the string: */
                ul = strtoul( string, &stopstring, base );
                printf( " strtol = %ld (base %d)\n", ul, base );
                printf( " Stopped scan at: %s\n", stopstring );
        }
}
运行结果:
$ ./a.out
string = 3.1415926This stopped it
 strtod = 3.141593
 Stopped scan at: This stopped it

string = -10110134932This stopped it
 strtol = -2147483648
 Stopped scan at: This stopped it
string = 10110134932
 strtol = 45 (base 2)
 Stopped scan at: 34932
 strtol = 4423 (base 4)
 Stopped scan at: 4932
 strtol = 2134108 (base 8)
 Stopped scan at: 932
3. strtod()  ---将字符串转换成浮点数
double strtod(const char *nptr,char **endptr);
函数说明:
strtod()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,到出现非数字或字符串结束时('\0')才结束转换,并将结果返回。
若endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr传回。
参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分。
如123.456或123e-2。
返回值:  返回转换后的浮点型数。
附加说明:   参考atof()。
例子:
#include <stdlib.h>
#include <stdio.h>

main()
{
        char *endptr;
        char a[]="12345.6789";
        char b[]="1234.567qwer";
        char c[]="-232.23e4";

        printf("a=%lf\n", strtod(a,NULL));
        printf("b=%lf\n", strtod(b,&endptr));
        printf("endptr=%s\n", endptr);
        printf("c=%lf\n", strtod(c,NULL));
}
运行结果:
l$ ./a.out
a=12345.678900
b=1234.567000
endptr=qwer
c=-2322300.000000
4. atof()  ---将字串转换成浮点型数
定义函数
double atof(const char *nptr);
函数说明 atof()会扫描参数nptr 字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。
参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2。
返回值 返回转换后的 浮点型数。
附加说明 atof()与使用 strtod(nptr,(char**)NULL)结果相同。
例子:
#include <stdlib.h>
#include <stdio.h>

int main()
{
        char *a="-100.23";
        char *b="200e-2";
        float c;

        printf("atof(a)=%.2f\n", atof(a));
        printf("atof(b)=%.2f\n", atof(b));

        c=atof(a)+atof(b);
        printf("c=%.2f\n",c);

        return 0;
}
运行结果:
$ ./a.out
atof(a)=-100.23
atof(b)=2.00
c=-98.23
5. atol()  ---把字符串转换成长整型数
定义函数:
 long atol(const char *nptr);
函数说明:
atol()会扫描参数nptr 字符串,跳过前面的空格字符(就是忽略掉字符串左空格的意思),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。
返回值:返回转换后的 长整型数。如果传入的字符串为空,或者字符串包含的内容非阿拉伯数字序列,则函数返回默认值0。
附加说明: atol()与使用 strtol(nptr,(char**)NULL,10);结果相同。
例子:
#include<stdlib.h>
#include<stdio.h>

main()
{
        char a[]="1000000000";
        char b[]="234567890";
        long c;

        printf("atol(a) = %ld\n",atol(a));
        printf("atol(b) = %ld\n",atol(b));

        c=atol(a)+atol(b);
        printf("c=%ld\n",c);

        return 0;
}
运行结果:
$ ./a.out
atol(a) = 1000000000
atol(b) = 234567890
c=1234567890
6. atoi() --- 把字符串转成整型int
原型:
int atoi(const char *nptr);
函数说明:
参数nptr字符串,如果 第一个非空格字符存在,并且,如果不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回 整型数。
例子:
/* ASCII to integer */

#include <stdlib.h>
#include <stdio.h>
int main()
{
        char a[] = "-100" ;
        char b[] = "123" ;
        int c ;

        c = atoi( a ) + atoi( b ) ;
        printf("c = %d\n", c) ;

        return 0;
}
运行结果:
$ ./a.out
c = 23



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值