当前位置:  开发笔记 > 开发工具 > 正文

C程序将十六进制转换为整数

如何解决《C程序将十六进制转换为整数》经验,为你挑选了1个好方法。

当它超过两位数时失败....

例如.输入:0xf 输出:15
但输入:0xFF输出:-1

char s[20],hexdigit=0,i=0,deci=0;
scanf("%[^\n]",s);
if(s[0]=='0' && (s[1]== 'X' || s[1]=='x'))
    i=2;
for(;s[i]!='\0';i++){

    if(s[i]>='0' && s[i]<='9')
        hexdigit=s[i]-'0';
    else if(s[i]>='a' && s[i]<='f')
        hexdigit=s[i]-'a'+10;
    else if(s[i]>='A' && s[i]<='F')
        hexdigit=s[i]-'A'+10;
    else
        break;
    deci=(16*deci)+hexdigit;
}
    printf("\n%d",deci);  

Roland Illig.. 5

char系统上的类型只能存储-128和之间的值+127.要获得更大的范围,请使用其他数据类型.

代替

char deci = 0;

int deci = 0;

这种类型也会溢出,但很久以后.通常位于2147483647.当您尝试解析任何较大的值时,行为是未定义的.

你可以通过写作再进一步

unsigned int deci = 0;

此类型将在4294967295处溢出,之后将再次以0开始.此处没有未定义的行为.



1> Roland Illig..:

char系统上的类型只能存储-128和之间的值+127.要获得更大的范围,请使用其他数据类型.

代替

char deci = 0;

int deci = 0;

这种类型也会溢出,但很久以后.通常位于2147483647.当您尝试解析任何较大的值时,行为是未定义的.

你可以通过写作再进一步

unsigned int deci = 0;

此类型将在4294967295处溢出,之后将再次以0开始.此处没有未定义的行为.


建议使用无符号类型,因为代码只会读取非负值,这将避免整数溢出UB
推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有