zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    css3 文本超出后出现省略号
    Bootstrap 开关(switch)控件需要注意的问题
    angularJs 使用中遇到的问题小结【一:关于传参】
    ctrl+enter提交留言
    div a块状布局
    模态框 快速选定合适的布局
    ionic 项目分享No.2——简化版【转】
    jquery判断div是否显示或者隐藏
    phpsotrm 设置命名空间
    win10 cmd 替换 powershell
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2500767.html
Copyright © 2011-2022 走看看