C函数strtol函数用法

Posted 叮咚咕噜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C函数strtol函数用法相关的知识,希望对你有一定的参考价值。

strtol函数

  • 作用: 把参数 str 所指向的字符串根据给定的 base 转换为一个长整数,字符串中数字的提取
  • 声明:
long int strtol(const char *nptr, char **endptr, int base)
  • 参数:
    • str – 要转换为长整数的字符串。
    • endptr – 对类型为 char* 的对象的引用,其值由函数设置为 str 中数值后的下一个字符。
    • base – 基数,必须介于 2 和 36(包含)之间,或者是特殊值 0。
  • 返回值:
    • 该函数返回转换后的长整数,如果没有执行有效的转换,则返回一个零值。
  • 解析:
    • 检测到第一个非法字符时,立即停止检测,其后的所有字符都会被当作非法字符处理。合法字符串会被转换为long int, 作为函数的返回值。非法字符串,即从第一个非法字符的地址,被赋给*endptr
  • 案例:

2进制

  • 当base为2时,合法字符为‘0’,‘1’
char buffer[20]="10379cend$3";
char *stop;
printf("%d/n",strtol(buffer, &stop, 2));
printf("%s/n", stop);
输出结果:
2
379cend$3

8进制

  • base为8时,合法字符为‘0’,‘1’,……‘7’
char buffer[20]="10379cend$3";
char *stop;
printf("%d/n",strtol(buffer, &stop, 8));
printf("%s/n", stop);
输出结果:
543
9cend$3

十进制

base为10时,合法字符为‘0’,‘1’,……‘9’

char buffer[20]="10379cend$3";
char *stop;
printf("%d/n",strtol(buffer, &stop, 10));
printf("%s/n", stop);
输出结果:
10379
cend$3

16进制

base 为16时,合法字符为‘0’,‘1’,……‘9’,‘a’,……‘f’

char buffer[20]="10379cend$3";
char *stop;
printf("%d/n",strtol(buffer, &stop, 16));
printf("%s/n", stop);
输出结果:
17005006
nd

其他

base为24时,合法字符为‘0’,……‘9’,‘a’,……‘n’
base为36时,合法字符为‘0’,……‘9’,‘a’,……‘z’

注意

  • 对于nptr指向的字符串,其开头和结尾处的空格被忽视,字符串中间的空格被视为非法字符
char buffer_1[20]="10379c";
char buffer_2[20]="      10379c        ";
char buffer_3[20]="      10      379c        ";
printf("%d/n",strtol(buffer_1,NULL,0));
printf("%d/n",strtol(buffer_2,NULL,0));
printf("%d/n",strtol(buffer_3,NULL,0));
输出结果为:
10379
10379
10
  • 如果base为0,且字符串不是以0x(或者0X)开头,则按十进制进行转化。如果base为0或者16,并且字符串以0x(或者0X)开头,那么,x(或者X)被忽略,字符串按16进制转化。如果base不等于0和16,并且字符串以0x(或者0X)开头,那么x被视为非法字符。
char buffer[20]="0x31da6c";
char *stop;
printf("%d/n",strtol(buffer, &stop, 0));
printf("%s/n", stop);
输出结果(stop为空)3267180

-------------------------------------------------------
char buffer[20]="0x31da6c";
char *stop;
printf("%d/n",strtol(buffer, &stop, 13));
printf("%s/n", stop);
输出结果:
0
0x31da6c

以上是关于C函数strtol函数用法的主要内容,如果未能解决你的问题,请参考以下文章

c语言字符处理函数常见使用集合

strtol函数讲解

在C中使用strtol逐行读取文本文件

字符数字转换 atoi 与 strtol

c_cpp 加载源图像固定用法(代码片段,不全)

Python中的基本函数及其常用用法简析