strtol及数制转换

函数及其参数

  long int strtol(const char *nptr,char **endptr,int base);
编辑本段
函数的解释说明

  这个函数会将参数nptr字符串根据参数base来转换成长整型数。参数base范围从2至36,或0。参
数base代表采的进制方式,如base值为10则采用10进制,若base值为16则采用16进制等。当base值为
0时则是采用10进制做转换,但遇到如’0x’前置字符则会使用16进制做转换、遇到’0’前置字符而
不是’0x’的时候会使用8进制做转换。一开始strtol()会扫描参数nptr字符串,跳过前面的空格字
符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('\0')结束转换,并将结
果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回;若
参数endptr为NULL,则会不返回非法字符串。
编辑本段
strtol是atoi的增强版

主要体现在这几方面:
  1.不仅可以识别十进制整数,还可以识别其它进制的整数,取决于base参数,比如strtol
("0XDEADbeE~~", NULL, 16)返回0xdeadbee的值,strtol("0777~~", NULL, 8)返回0777的值。
  2.endptr是一个传出参数,函数返回时指向后面未被识别的第一个字符。例如char *pos;
strtol("123abc", &pos, 10);,strtol返回123,pos指向字符串中的字母a。如果字符串开头没有可
识别的整数,例如char *pos; strtol("ABCabc", &pos, 10);,则strtol返回0,pos指向字符串开头
,可以据此判断这种出错的情况,而这是atoi处理不了的。
  3.如果字符串中的整数值超出long int的表示范围(上溢或下溢),则strtol返回它所能表示的
最大(或最小)整数,并设置errno为ERANGE,例如strtol("0XDEADbeef~~", NULL, 16)返回
0x7fffffff并设置errno为ERANGE


//进制转换a到b,注意需要全用字符串
void fun(int a,int b,int temp[])
{
int i=0,j;
while(a)
{
temp[i++]=a%b;
a/=b;
}
//倒置存放,共i位
for(j=0;j<i/2;j++)
temp[j]=temp[i-j-1];
}
int fun(int num[],int a)//转为十进制
{
int ans=0;int i=0;//num数组是上面的temp数组
ans=ans*a+num[i];//m[]从最高位开始,类似秦九韶算法
return ans;
}

原文地址:https://www.cnblogs.com/hxsyl/p/2500767.html