当它超过两位数时失败....
例如.输入: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开始.此处没有未定义的行为.
char
系统上的类型只能存储-128
和之间的值+127
.要获得更大的范围,请使用其他数据类型.
代替
char deci = 0;
写
int deci = 0;
这种类型也会溢出,但很久以后.通常位于2147483647.当您尝试解析任何较大的值时,行为是未定义的.
你可以通过写作再进一步
unsigned int deci = 0;
此类型将在4294967295处溢出,之后将再次以0开始.此处没有未定义的行为.