首页 > 编程笔记

C语言strtol():将字符串转换为长整数

strtol() 是 C语言的一个标准库函数,定义在<stdlib.h>头文件中。

strtol() 函数用于将字符串转换为长整数(long)。函数原型如下:
long int strtol(const char *str, char **endptr, int base);

参数

  1. str: 指向要转换的字符串。
  2. endptr: 可选的输出参数,如果不为 NULL,则函数执行完后,endptr 指向下一个要转换的字符。
  3. base: 数字的基数,从 2 到 36 之间,也可以为 0,表示根据特定规则自动检测基数。

返回值

返回转换成功后的长整数;如果无法进行有效的转换,函数返回 0L;如果转换后的数值超出了 long 类型所能表示的范围,函数会返回  LONG_MAX 或者 LONG_MIN (定义在<limits.h>头文件)。

转换过程中,strtol() 函数首先会丢弃尽可能多的空白字符,直至找到第一个非空白字符,然后从该字符开始获取尽可能说的有效字符,并将它们转换成长整数。如果 endptr 不为 NULL,且后续还有无效的字符串,则将 endptr 指向首个无效的字符。

【实例】以下 C语言代码演示了 strtol() 函数的功能和用法。
#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

推荐阅读