资源描述:
《两个进制转换函数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、介绍两个进制转换用到的函数1,strtol(转载)今天,在review一些代码的时候,看到了strtol()这个函数,由于以前使用它的时候,还没有深刻的了解,这次,我决定探个究竟。网上关于这个函数的资料大都来源于同份资料,linux库函数,讲的不够细致。于是,我花了几个小时,认真地尝试其功能,并整理了这篇文章,希望能对C语言的爱好者一些帮助。希望大家能够将本文中发现的错误及时反馈给我,以便修正。我的信箱是wp.qin@sunmedia.com。+----------------+
2、 strtol
3、+----------------+i.e.string
4、tolonglongintstrtol(constchar*nptr,char**endptr,intbase)strtol()会将nptr指向的字符串,根据参数base,按权转化为longint,然后返回这个值。参数base的范围为2~36,和0;它决定了字符串以被转换为整数的权值。可以被转换的合法字符依据base而定,举例来说,当base为2时,合法字符为‘0’,‘1’;base为8时,合法字符为‘0’,‘1’,……‘7’;base为10时,合法字符为‘0’,‘1’,……‘9’;base为16时,合法字符为‘0’,‘1’,……‘9’,‘a’,……‘f’;base为24时,合法字符
5、为‘0’,……‘9’,‘a’,……‘n’,base为36时,合法字符为‘0’,……‘9’,‘a’,……‘z’;等等。其中,不区分大小写,比如,‘A’和‘a’会都会被转化为10。当字符合法时,‘0’,……‘9’依次被转换为十进制的0~9,‘a’,……‘z’一次北转换为十进制的10~35。strtol()函数检测到第一个非法字符时,立即停止检测,其后的所有字符都会被当作非法字符处理。合法字符串会被转换为longint,作为函数的返回值。非法字符串,即从第一个非法字符的地址,被赋给*endptr。**endptr是个双重指针,即指针的指针。strtol()函数就是通过它改变*endptr的
6、值,即把第一个非法字符的地址传给endptr。多数情况下,endptr设置为NULL,即不返回非法字符串。下面看几个例子:------------------------------------------------------charbuffer[20]="10379cend$3";char*stop;printf("%d",strtol(buffer,&stop,2));printf("%s",stop);输出结果:2379cend$3-------------------------------------------------------charbuffer[20
7、]="10379cend$3";char*stop;printf("%d",strtol(buffer,&stop,8));printf("%s",stop);输出结果:5439cend$3--------------------------------------------------------charbuffer[20]="10379cend$3";char*stop;printf("%d",strtol(buffer,&stop,10));printf("%s",stop);输出结果:10379cend$3--------------------------
8、-----------------------------charbuffer[20]="10379cend$3";char*stop;printf("%d",strtol(buffer,&stop,16));printf("%s",stop);输出结果:17005006nd$3另外,如果base为0,且字符串不是以0x(或者0X)开头,则按十进制进行转化。如果base为0或者16,并且字符串以0x(或者0X)开头,那么,x(或者X)被忽略,字符串按16进制转化。如果base不等于0和16,并且字符串以0x(或者0X)开头,那么x被视为非法字符。例如:------------
9、-------------------------------------------charbuffer[20]="0x31da6c";char*stop;printf("%d",strtol(buffer,&stop,0));printf("%s",stop);输出结果(stop为空):3267180-------------------------------------------------------charbuffer[20]="0x