回复 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编辑过]