本文主要介绍C语言中strtol()函数和strtol()函数的用法,并注意将string转换为long的区别。有需要的朋友可以参考一下。
C strtol()函数:将一个字符串转换成一个long(长整数)
头文件:
#包含stdlib.h
strtol()函数用于将字符串转换为长整型(long),其原型为:
long int strtol (const char* str,char** endptr,int base);
【参数说明】str是要转换的字符串,endstr是不能转换的第一个字符的指针,base是字符串str采用的十进制。
【函数说明】strtol()会根据参数基将参数str字符串转换成长整型(long)。基本参数范围从2到36,即0。base参数表示str采用的十进制模式。如果基值是10,则采用十进制,如果基值是16,则采用十六进制。
Strtol()将扫描参数str字符串,跳过前面的空格字符(如空格、制表符缩进等。可以通过isspace()函数检测到),开始转换,直到遇到数字或正负符号,然后在遇到非数字或字符串结尾(' \0 ')时结束转换,返回结果。
注意两点:
当base的值为0时,默认情况下采用十进制转换,但如果遇到“0X”/“0X”前缀,将使用十六进制转换,如果遇到“0”前缀,将使用八进制转换。
如果endptr不为空,则返回endptr未限定终止的字符的指针;如果endptr为NULL,则此参数无效或未使用。
[返回值]返回转换后的长整数;如果不能转换或者str为空字符串,则返回0(0L);如果转换后的值超出了long int可以表示的范围,该函数将返回LONG_MAX或LONG_MIN(在limits.h头文件中定义),并将errno的值设置为e range。
[示例]将字符串转换为十进制。
#包含stdio.h
#包含stdlib.h
int main()
{
char SZ numbers[]=' 2001 60c0c 0-110111010011001000000x 6 fffff ';
char * pEnd
long int li1,li2,li3,li4
li1=strtol (szNumbers,pEnd,10);
li2=strtol (pEnd,pEnd,16);
li3=strtol (pEnd,pEnd,2);
li4=strtol (pEnd,NULL,0);
Printf('转换为十进制:%ld,%ld,%ld,%ld\n ',li1,li2,li3,li4);
系统(“暂停”);
返回0;
}
执行结果:
转换成十进制:
2001、6340800、-3624224、7340031
C strtoul()函数:将字符串转换为无符号长整型(无符号长整型)
头文件:
#包含stdlib.h
strtoul()函数源自“字符串到无符号长整型”,用于将字符串转换为无符号长整型。它的原型是:
无符号长整型strtoul (const char* str,char** endptr,int base);
【参数说明】str是要转换的字符串,endstr是不能转换的第一个字符的指针,base是字符串str采用的十进制。
【函数说明】strtoul()会根据参数基将参数str字符串转换成无符号长整型数。基本参数范围从2到36,即0。base参数表示str采用的十进制模式。如果基值是10,则采用十进制,如果基值是16,则采用十六进制。
Strtoul()将扫描参数str字符串,跳过前面的空格字符(如空格、制表符缩进等。可以用isspace()函数检测),开始转换,直到遇到一个数字或者正负符号,然后遇到一个非数字或者字符串的结尾(' \0 '),结束转换,返回结果。
注意两点:
当base的值为0时,默认情况下采用十进制转换,但如果遇到“0X”/“0X”前缀,将使用十六进制转换,如果遇到“0”前缀,将使用八进制转换。
如果endptr不为空,则返回endptr未限定终止的字符的指针;如果endptr为NULL,则此参数无效或未使用。本文的最后一个例子没有展示endptr参数的使用。可以参考strtol()函数的例子,更直观的理解endptr参数。
[返回值]返回转换后的无符号长整数;如果不能转换或者str为空字符串,则返回0;如果转换后的值超出了无符号long int可以表示的范围,该函数将返回ULONG_MAX(在limits.h头文件中定义),并将errno的值设置为e range。
温馨提示:ANSI C规范定义了6个可以将字符串转换为数字的函数:stof()、atoi()、atol()、strtod()、strtod()和strtod()。可以通过对比来学习。另外,C99/C 11中新增了五个函数,分别是atoll()、strtof()、strtold()、strtoll()、strtoll(),这里不做介绍。请自学。
示例:将输入字符串转换为无符号长整数。
#包含stdio.h
#包含stdlib.h
int main()
{
char缓冲器[256];
无符号长ul;
printf('输入一个无符号数:');
fgets (buffer,256,stdin);
ul=strtoul (buffer,NULL,0);
printf('输入的值:%lu。\n ',ul);
系统(“暂停”);
返回0;
}
运行结果:
输入一个无符号数:017cyuyan
输入的值:15。
由于base参数设置为0,字符串“017cyuyan”以“0”开头,所以采用八进制转换。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。