strtol
函数 <cstdlib>
long int strtol (const char* str, char** endptr, int base);
将字符串转换为long integer
解析C-string str,将其内容解释为指定base(进制)的整数值,并返回一个long int值。
如果endptr不是空指针,该函数还将endptr的值设置为指向数字后面的第一个字符。
函数丢弃所有开头的空格字符,直到找到第一个非空格字符。
然后,从这个字符开始,根据base(进制)参数取尽可能多的有效字符,并将它们解释为数值。
最后,一个指向str中整数表示后第一个字符的指针存储在endptr所指向的对象中。
如果base(进制)的值为零,则期望的语法类似于整数常量,整数常量由一系列的:
-
一个可选的符号字符(+或-)
-
一个可选的前缀,表示八进制或十六进制为基数(分别为"0"或"0x"/" 0X")
-
一个十进制数字序列(如果没有指定基数前缀),或者如果存在特定前缀,则是八进制或十六进制数字序列
如果base(进制)值在2到36之间,整数的格式是表示指定基数的整数所需的任何有效数字和/或字母的连续
(对于基数(进制)36,从'0'到'z'/' Z')。
序列前面可以有一个符号(+或-),如果base为16,则有一个可选的“0x”或“0x”前缀。
如果str中的第一个非空白字符序列不是上面定义的有效整数值,
或者由于str为空或仅包含空白字符而不存在这样的序列,则不执行转换。
对于“C”语言环境以外的语言环境,可以接受额外的主语顺序形式。
☲ 参数
str
以整数表示开头的c字符串。
endptr
对已经分配的char*类型对象的引用,该对象的值由函数设置为数值后的str中的下一个字符。
这个参数也可以是一个空指针,在这种情况下它不会被使用。
base
确定有效字符及其解释的基数(radix)。
如果这是0,使用的基数是由序列中的格式决定的(参见上面)。
☉ 返回值
如果成功,该函数将转换后的整数值作为long int 型值返回。
如果不能执行有效的转换,则返回零值(0L)。
如果读取的值超出了long int的可表示值范围,则函数返回LONG_MAX或LONG_MIN
(在<
climits>中定义),
errno设置为ERANGE。
☣ 示例
/* strtol example */
#include <stdio.h> /* printf */
#include <stdlib.h> /* strtol */
int main ()
{
char szNumbers[] = "2001 60c0c0 -1101110100110100100000 0x6fffff";
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 ("The decimal equivalents are: %ld, %ld, %ld and %ld.\n", li1, li2, li3, li4);
return 0;
}
|
输出:
The decimal equivalents are: 2001, 6340800, -3624224 and 7340031
↭ 数据竞争
str指向的数组被访问,endptr指向的指针被修改(如果不是null)。
❆ 异常(c++)
无抛出保证:此函数从不抛出异常。
如果str没有指向有效的C-string,或者endptr没有指向有效的指针对象,将导致未定义的行为。
🍄 另请参阅
strtoul |
将字符串转换为unsigned long integer(function ) |
strtod |
将字符串转换为double (function ) |
atol |
将字符串转换为 long integer (function ) |