Prova con queste funzioni (non assicuro che siano corrette e, soprattutto, non funzionano con numeri negativi!):
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;
}
Un esempio di utilizzo:
codice:
int main(int argc, char **argv) {
printf("Conversione 0xAF: %d\n", conv("af", 16));
return 0;
}
Ciao.