diff --git a/cMIPS/include/main.c b/cMIPS/include/main.c index f46dc897cd5a5195e600ed32caa372ed2bade68e..99ada0145ad848fc714e0b5e5cbcc75335ef1fc3 100644 --- a/cMIPS/include/main.c +++ b/cMIPS/include/main.c @@ -23,63 +23,12 @@ int hex2int(char *hex) { int s= Strlen(hex), i, ans= 0; for (i= 0; i< s; i++) { - switch(hex[i]) { - case 'F': - case 'f': - ans+= 15*pow16(s-(i+1)); - break; - case 'E': - case 'e': - ans+= 14*pow16(s-(i+1)); - break; - case 'D': - case 'd': - ans+= 13*pow16(s-(i+1)); - break; - case 'C': - case 'c': - ans+= 12*pow16(s-(i+1)); - break; - case 'B': - case 'b': - ans+= 11*pow16(s-(i+1)); - break; - case 'A': - case 'a': - ans+= 10*pow16(s-(i+1));; - break; - case '9': - ans+= 9*pow16(s-(i+1));; - break; - case '8': - ans+= 8*pow16(s-(i+1));; - break; - case '7': - ans+= 7*pow16(s-(i+1));; - break; - case '6': - ans+= 6*pow16(s-(i+1));; - break; - case '5': - ans+= 5*pow16(s-(i+1));; - break; - case '4': - ans+= 4*pow16(s-(i+1));; - break; - case '3': - ans+= 3*pow16(s-(i+1));; - break; - case '2': - ans+= 2*pow16(s-(i+1));; - break; - case '1': - ans+= 1*pow16(s-(i+1));; - break; - default: - if (hex[i] != '0') - printf("ERROR!\n"); - break; - } + hex[i]-= 48; + if (hex[i] > 9) + hex[i] -= 7; + if (hex[i] > 15) + hex[i] -= 32; + ans += hex[i] * pow16(s-(i+1)); } return ans; } @@ -110,12 +59,12 @@ int main() { char n[16], f[16]; int fib; - while (scanf("%s", n) > 0) { + while (scanf("%s", n) && n[0]) { // trocar scanf por getc() fib= hex2int(n); if (fib < BUF_SZ) { fib = buf[fib]; int2hex(f, fib); - printf("%d(%s)\n", fib, f); + printf("%d(%s)\n", fib, f); // trocar printf por putc() } else printf("Valor fora dos limites!\n"); }