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");
}