codice:#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { /* * La conversione esadecimale --> decimale avviene * moltiplicando ogni valore del numero esadecimale * per (16 elevato alla posizione) e facendo la somma * dei risultati. * Esempio, per convertire in decimale il numero FFB * facciamo: (F*16^2) + (F*16^1) + (B*16^0) che * corrisponde a (15*16^2) + (15*16^1) + (11*16^0) = 4091. */ int valore; //conterrà il valore decimale finale char buffer[256]; //contiene il valore esadecimale inserito dall'utente printf("Inserisci il numero esadecimale da convertire in decimale: "); scanf("%s", buffer); //acquisisco il numero int len = strlen(buffer); //calcolo la lunghezza del numero inserito int i = 0; //indice usato per lo scorrimento nel while char c; //carattere di appoggio while(buffer[i] != '\0') { /*Per raggiungere il mio scopo utilizzo il codice ASCII. * La variabile c contiene il codice ASCII di una cifra. Facendo * c - '0', sto sottraendo al codice ASCII di c il valore 48. * Esempio: * c = '7'. Il codice ASCII di '7' è 55, quindi di fatto quello * che accade è c = 55 - 48 = 7. Se c è un codice ASCII che * rappresenta delle lettere (controllo dell'if), allora * sottraggo ulteriormente 7 a c per ottenere il loro valore * decimale corrispondente. Ad esempio la lettera A in ASCII * corrisponde a 65. 65 - 48 = 17. Ma la A in decimale è * pari a 10, quindi sottraiamo ulteriormente 7. Lo stesso * vale per le altre lettere fino ad F. */ c = buffer[i]-'0'; if(c > 9) c-=7; valore += c*(pow(16,len-1)); i = i + 1; len = len - 1; } printf("\nIl numero decimale corrispondente e': %d\n", valore); system("PAUSE"); }