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函数用法的主要内容,如果未能解决你的问题,请参考以下文章