C库函数之 strtol函数详解
strtol函数详解
- 函数声明
- base为0的情况
- endptr的妙用
函数声明
long int strtol (const char* str, char** endptr, int base);
参数1:str
——字符串,函数会从合法的字符开始识别,之前的空格字符会被跳过,合法字符串会被转换为long int, 作为函数的返回值。
参数2:endptr
——字符指针的地址,如果该参数非NULL,则保存一个指向转换值后面的第一个指针。这个指针方便对字符串剩余的部分进行处理。
参数3:base——转换所执行的基数,说人话就是,base将决定以多少进制来看待str里的字符串。
base值的可选范围:0和2~36。
如果base为2,合法的字符就是’0’,‘1’。
对于base11到36,字母A~Z将被解释为数值10到35。
如果base为16,那么合法字符为’0’~‘9’,‘a’,‘b’,‘c’,‘d’,‘e’,‘f’。
总结:
该函数首先丢弃必要的空格字符,直到找到第一个非空格字符。然后,从这个字符开始,根据依赖于base取尽可能多的有效字符,并将它们解释为十进制数值。最后,一个指向str中整数表示后第一个字符的指针存储在endptr所指向的对象中。
例1
int main()
{char buffer[] = " 0110";int i = strtol(buffer, NULL, 2);printf("%d\n",i);
}
输出:
字符串前置的空格将会被跳过,然后根据2进制只识别字符’0’,‘1’。然后转换为10进制。
例2:
int main()
{char buffer[] = " a0110";int i = strtol(buffer, NULL, 2);printf("%d\n",i);
}
输出:
不能执行有效的转换,返回0。
例3
int main()
{char buffer[] = "1033a";char* stop;int i = strtol(buffer, &stop, 2);printf("%d\n",i);printf("%s\n",stop);
}
例4
int main()
{char buffer[] = "ffg";char* stop;int i = strtol(buffer, &stop, 16);printf("%d\n",i);printf("%s\n",stop);
}
base为0的情况
如果base为0,一般情况下是以十进制识别str中合法的字符,即’0’-‘10’。
但是有两个特殊情况,
当字符串的前缀为0,base为0情况下,则与base=8的情况一样,以八进制转换字符串中的合法字符。
如果str前缀不是0,则base=0和base=10的结果是一样的
同理,如果前缀为0x(0X),则base=0和base=16效果是一样的
没有前缀,则base=0视为base=10
此时,对于十进制来说,'f’是无法识别的。
注意:
当base>=34时,前缀0x中的字符’x’会被识别成数值33。
endptr的妙用
可将各类2~36进制数,转换为10进制
int main()
{char buffer[] = "1010 77 ff z";char* stop=buffer;int i1 = strtol(stop, &stop, 2);int i2 = strtol(stop, &stop, 8);int i3 = strtol(stop, &stop, 16);int i4 = strtol(stop, &stop, 36);printf("十进制表示为:%d,%d,%d,%d", i1, i2, i3, i4);return 0;
}
C库函数之 strtol函数详解相关推荐
- 【C库函数】qsort函数详解
目录 qsort 函数基本原型 参数解读 函数详解 比较函数实现并解读 qsort函数排序代码实现并展示结果 1.排序整型数组 2.排序结构体 qsort 函数是基于快速排序算法实现的一个排序函数 ...
- 【C库函数】strncpy函数详解
目录 strncpy 函数原型 参数讲解 返回值讲解 函数讲解 (1)一般使用场景 (2)特殊使用场景(错误) strncpy 拷贝n个字符到目标字符串中 函数原型 char *str ...
- C/C++之strtol函数详解
翻了翻旧代码,发现以前对strtol这个函数不太了解,特此分析一下. C 库函数strtol原型为: long int strtol(const char *str, char **endptr, i ...
- 【C库函数】strerror函数详解
目录 strerror 函数原型 参数详解 返回值详解 函数讲解 strerror 返回错误码,所对应的错误信息 函数原型 char *strerror( int errnum ); 参数详解 参数 ...
- 【C库函数】 strstr函数详解
目录 strstr 函数原型 参数详解 返回值详解 函数讲解 strstr 查找字符子串 函数原型 char *strstr( const char *str1, const char *str2 ) ...
- 【C库函数】strlen函数详解
目录 strlen 函数基本原型 参数解读 返回值详解 函数用法详解 strlen 获得字符串的长度(string length) 函数基本原型 size_t strlen( const cha ...
- 【C库函数】strcat函数详解
目录 strcat 函数原型 参数讲解 返回值详解 函数讲解 (1)源字符串和目标字符串都必须以'\0'结束 (2)目标空间必须足够大,能容纳下源字符串的内容 (3)目标空间必须可修改 strcat ...
- strtol 函数详解
样题: POJ 2105 +----------------+ | strtol | +----------------+ i.e. string to long l ...
- 【C库函数】memcpy函数详解
目录 memcpy 函数原型 参数讲解 返回值讲解 函数讲解(三个注意点) memcpy 拷贝内存块到目标空间 函数原型 void *memcpy( void *dest, const void *s ...
最新文章
- 面试官问你想找什么工作_找工作时如何面试面试官
- 修完 Bug 后脑袋灵光一现 | 每日趣闻
- C/C++ 中访问结构体成员的方法
- 045_CSS3过渡
- import lombok 报错_lombok
- 自定义一个SharedPreferences工具类
- Numpy基础(part1)--ndarray数组
- 读博和不读博的理由是什么?
- mysql工作表格制作教程_Access制作复杂报表
- poj2942(双联通分量,交叉染色判二分图)
- 2018-6-19bash编程之循环
- jquery.eq()
- Python标准类型的分类
- python垃圾回收机制gcgo_python垃圾处理机制
- 电机轴承的检查和安装方法
- C语言——输入输出格式
- PS教程:紫色光晕效果实现
- 西瓜书第一第二章理解
- 如何根据vin码查询_汽车VIN码是什么,怎么查询Vin码?
- 哈工大计算机网络MOOC作业题解答
热门文章
- 利用R语言解压与压缩 .tar.gz .zip .gz .bz2 等文件
- lammps教程:hcp类型晶格建模缺陷及解决方案
- win2012文件服务器添加角色,win2012系统无法添加角色处理教程
- 一个针对巴勒斯坦地区进行攻击的APT组织最新活动和相关性分析
- 微信支付-chooseWXPay:fail, the permission value is offline verifying
- 基于JAVA物资物流管理系统计算机毕业设计源码+系统+lw文档+部署
- netty 工控网关_开源纯C#工控网关+组态软件(九)定制Visual Studio
- LeetCode刷题-独一无二的出现次数
- 【工作计划】6.11-6.15
- 烈火如歌手游找回服务器,烈火如歌手游完美还原剧中场景