Prova con queste funzioni (non assicuro che siano corrette e, soprattutto, non funzionano con numeri negativi!):
Un esempio di utilizzo:codice:inline int intpow(int val, int p) { return (p ? val * intpow(val, p-1) : 1); } int valore(char c) { int ret = 0; if ((c >= '0') && (c <= '9')) { ret = c - '0'; } else { switch( (char) (c & 223) ) { case 'A': ret = 10; break; case 'B': ret = 11; break; case 'C': ret = 12; break; case 'D': ret = 13; break; case 'E': ret = 14; break; case 'F': ret = 15; break; } } return ret; } int conv(char *str, int radix) { int ret = 0; int i = 0; switch( radix ) { case 10: for(i = strlen(str); i; i--) { ret += (str[i-1] - '0') * intpow(radix, strlen(str)-i); } break; case 16: for(i = strlen(str); i; i--) { ret += valore(str[i-1]) * intpow(radix, strlen(str)-i); } } return ret; }
Ciao.codice:int main(int argc, char **argv) { printf("Conversione 0xAF: %d\n", conv("af", 16)); return 0; }![]()



Rispondi quotando