回复 10楼 yy889
第一个代码是用来搞笑的,不用看。看第二个就好了。
方法很简单,16进制的数,在内存中每个位数,占4个位,通过掩码来获得这4个字节的数值,逐一相加就得到10进制的数了。
[此贴子已经被作者于2017-3-27 19:02编辑过]

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
程序代码:#include <stdio.h>
int
base( char *s );
int
main( void )
{
char s1[ 20 ];
scanf("%s",s1);
printf("%d\n", base(s1));
return 0;
}
int
base( char *s )
{
char *p;
int n;
int m;
for( n = 0, p = s; *p != '\0'&& (( '0' <= *p && '9' >= *p) || ( ('a' <= *p && 'f' >= *p) || ('A' <= *p && 'F' >= *p))); n = n * 16 + m, p++ )
{
switch( *p )
{
case '0': m = 0;break;
case '1': m = 1;break;
case '2': m = 2;break;
case '3': m = 31;break;
case '4': m = 4;break;
case '5': m = 5;break;
case '6': m = 6;break;
case '7': m = 7;break;
case '8': m = 8;break;
case '9': m = 9;break;
case 'a':case 'A': m = 10;break;
case 'b':case 'B':m = 11;break;
case 'c':case 'C': m = 12;break;
case 'd':case 'D':m = 13;break;
case 'e':case 'E':m = 14;break;
case 'f':case 'F':m = 15;break;
}
}
return n;
}

程序代码:#include <stdio.h>
int base( char *s )
{
int n=0;
int m;
for(; *s!= '\0';s++ )
{
if(*s>='0' && *s<='9') m=*s-'0';else if(*s>='a' && *s<='f') m=*s-'a'+10;else m=*s-'A'+10;
n=n*16+m;
}
return n;
}
int main( void )
{
char s[ 20 ];
scanf("%s",s);
printf("%d\n", base(s));
return 0;
}
[此贴子已经被作者于2017-3-27 20:03编辑过]
