C/C++之strtol函数详解

翻了翻旧代码,发现以前对strtol这个函数不太了解,特此分析一下。

C 库函数strtol原型为:

     long int strtol(const char *str, char **endptr, int base) ;

其运行过程为:

    把参数 str 所指向的字符串根据给定的 base 转换为一个长整数(类型为 long int 型),并将该长整数转换为十进制数返回,如果没有符合的结果,则返回一个0值;

    base 必须介于 2 和 36(包含)之间,或者是特殊值 0;

    str中不符合base的部分存储于*endptr中。

----------------------------------------------------------------------------------------------------------------------------------------

 我们来看一下实例:

#include <iostream>
using namespace std;
int main() {
    char buffer[20]="112233abc11";
    char *endptr;
    cout << "初始字符串为:" << buffer << "\n" << endl;
    long result = strtol(buffer, &endptr, 2);
    cout << "符合的结果并转换为十进制数result: "<< result << "\t, 余下的字符串endptr: " << endptr << endl;
    return 0;
}

输出结果为:

初始字符串为:112233abc11

符合的结果并转换为十进制数result: 3     , 余下的字符串endptr: 2233abc11

即符合base为2条件的只有0和1,所以通过函数我们得到11,函数将11转为十进制数得到3返回给result,余下的字符串存储到endptr中,其它情况依此类推。

base的筛选条件(抄录自zxx2096的博客:strtol()详解):

当base为2时,合法字符为‘0’,‘1’;

base为8时,合法字符为‘0’,‘1’,……‘7’;

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

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

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

base为36时,合法字符为‘0’,……‘9’,‘a’,……‘z’;等等。

其中,不区分大小写,比如,‘A’和‘a’会都会被转化为10。

到此,应该对该函数的使用较为清晰了吧。

  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
所有的 C / C++ 函数 Constructors (cppstring) Constructors (cppvector) Operators (cppbitset) Operators (cppdeque) Operators (cppstack) Operators (cppstring) Operators (cppvector) abort (stdother) abs (stdmath) acos (stdmath) any (cppbitset) append (cppstring) asctime (stddate) asin (stdmath) assert (stdother) assign (cppdeque) assign (cpplist) assign (cppstring) assign (cppvector) at (cppdeque) at (cppstring) at (cppvector) atan (stdmath) atan2 (stdmath) atexit (stdother) atof (stdstring) atoi (stdstring) atol (stdstring) back (cppdeque) back (cpplist) back (cppqueue) back (cppvector) bad (cppio) begin (cppdeque) begin (cpplist) begin (cppmap) begin (cppmultimap) begin (cppmultiset) begin (cppset) begin (cppstring) begin (cppvector) bsearch (stdother) c_str (cppstring) calloc (stdmem) capacity (cppstring) capacity (cppvector) ceil (stdmath) clear (cppdeque) clear (cppio) clear (cpplist) clear (cppmap) clear (cppmultimap) clear (cppmultiset) clear (cppset) clear (cppvector) clearerr (stdio) clock (stddate) compare (cppstring) copy (cppstring) cos (stdmath) cosh (stdmath) count (cppbitset) count (cppmap) count (cppmultimap) count (cppmultiset) count (cppset) ctime (stddate) data (cppstring) #define (preproc) difftime (stddate) div (stdmath) empty (cppdeque) empty (cpplist) empty (cppmap) empty (cppmultimap) empty (cppmultiset) empty (cpppriorityqueue) empty (cppqueue) empty (cppset) empty (cppstack) empty (cppstring) empty (cppvector) end (cppdeque) end (cpplist) end (cppmap) end (cppmultimap) end (cppmultiset) end (cppset) end (cppstring) end (cppvector) eof (cppio) equal_range (cppmap) equal_range (cppmultimap) equal_range (cppmultiset) equal_range (cppset) erase (cppdeque) erase (cpplist) erase (cppmap) erase (cppmultimap) erase (cppmultiset) erase (cppset) erase (cppstring) erase (cppvector) #error (preproc) exit (stdother) exp (stdmath) fabs (stdmath) fail (cppio)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值