atoi marchera pas, il prend des nombres en base decimal :s.
le truc a faire est d'utiliser un int, d analyser chaque lettre de ton nombre en hexa,et pour chaque lettre tu vas additioner la valeur qui lui correspond en decimal * le nombre de puissance de 16

pour bien comprendre un petit exemple (en decimal :p )
-> char nombre[]="25384";
-> int inombre=0;
-> puissance=1;
->chiffre=0;
tu trouve la fin de la chaine -> '4'
tant que l'on a pas atteint le debut de la chaine
{
chiffre=on transorme le chiffre de ta chaine en int -> on peut le faire ac atoi pour les truc base 10 sinon par une fonction ac un switch et 16 case;
if(puissance !=0)
inombre+=chiffre*10*puissance
else
inombre+=chiffre;
puissance++;
on se deplace de 1 case vers le debut de la chaine;
}