注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

旷世的忧伤

不与夏虫语寒,不与曲人语道,因为生命缺乏言说的条件......

 
 
 

日志

 
 

C语言中字符串如何转换为二进制、八进制、十进制、十六进制  

2015-04-16 12:24:07|  分类: C语言 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
C语言的 strtol 函数能将字符串转换为二进制、八进制、十进制、十六进制。

原型:

#include <stdlib.h>

long int strtol(const char *nptr, char **endptr, int base);
long long int strtoll(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 返回空字符串,即“”;若参数 endptr 为NULL,则会不返回非法字符串。strtol实际上可以说是atoi的增强版,其主要体现在一下方面:
  • 不仅可以识别十进制整数,还可以识别其它进制的整数,取决于base参数,比如strtol("0XDEADbeE~~", NULL, 16)返回0xdeadbee的值,strtol("0777~~", NULL, 8)返回0777的值。
  • endptr是一个传出参数,函数返回时指向后面未被识别的第一个字符。例如char *pos; strtol("123abc", &pos, 10);,strtol返回123,pos指向字符串中的字母a。如果字符串开头没有可识别的整数,例如char *pos; strtol("ABCabc", &pos, 10);,则strtol返回0,pos指向字符串开头,可以据此判断这种出错的情况,而这是atoi处理不了的。
  • 如果字符串中的整数值超出long int的表示范围(上溢或下溢),则strtol返回它所能表示的最大(或最小)整数,并设置errno为ERANGE,例如strtol("0XDEADbeef~~", NULL, 16)返回0x7fffffff并设置errno为ERANGE

例:

int main(int argc, char *argv[])
{
    long int result;
    char *invalidstr = NULL;

    if (argc != 2)
    {
        printf("Usage: strtol <string>");
    }

    // long int strtol(const char *nptr, char **endptr, int base);
    result = strtol(argv[1], &invalidstr, 8);

    if (strcmp(invalidstr, ""))
    {
        printf("Invalid character: %s\n", invalidstr);
        return 1;
    }

    printf("Result: %lo\n", result);

    return 0;
}

  评论这张
 
阅读(7)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018