Convertir un décimal en hexa
Bonjour,
Je viens de coder une fonction qui permet de convertir un décimal en hexadécimal. Je l'ai fait pour tout nombre de type unsigned int, sachant qu'en fait le plus grand nombre qui sera passé à ma fonction ne dépassera pas la valeur décimale du dernier caractère de la table ASCII étendue, soit 255 ( besoin de cette fonction pour écrire des données en hexa dans le registre ).
La voici :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| char *conversion_HEXA(unsigned int i)
{
char *res = NULL;
int r = 0;
int q = 0;
int taille = 0;
q = i / 16;
taille++;
do
{
q /= 16;
taille++;
}while (q != 0);
if ((res = malloc(taille)) == NULL)
{
printf("Erreur d'allocation mémoire...\n");
}
r = i % 16;
q = i / 16;
res[taille] = '\0';
taille--;
if (r == 10)
res[taille] = 65;
else if (r == 11)
res[taille] = 66;
else if (r == 12)
res[taille] = 67;
else if (r == 13)
res[taille] = 68;
else if (r == 14)
res[taille] = 69;
else if (r == 15)
res[taille] = 70;
else if (r == 16)
res[taille] = 71;
else
res[taille] = 48+r;
do
{
taille--;
r = q % 16;
q /= 16;
if (r == 10)
res[taille] = 65;
else if (r == 11)
res[taille] = 66;
else if (r == 12)
res[taille] = 67;
else if (r == 13)
res[taille] = 68;
else if (r == 14)
res[taille] = 69;
else if (r == 15)
res[taille] = 70;
else if (r == 16)
res[taille] = 71;
else
res[taille] = 48+r;
}while (q != 0);
return(res);
}
int main ()
{
char *tab = NULL;
printf("%s\n", tab = conversion_HEXA(1000));
return(0);
} |
J'aurais aimé avoir vos commentaires et avis sur ce bout de code : est-ce bien codé ? Peut-on faire plus simple ?
J'aimerais un retour critique dessus.
Merci par avance.
:ccool: