Dans le but de lire au clavier et d'afficher à l'écran des nombres hexadécimaux, il est nécessaire de pouvoir passer d'une valeur numérique contenue dans une case mémoire à une chaîne de caractères et vice-versa. Une chaîne de caractères est une suite composée des codes ASCII (8 bits) de chacun de ses caractères, terminée par le code ASCII « 0 ». On sait que les codes ASCII des chiffes ('0' à '9') sont consécutifs et inférieurs aux codes ASCII des lettres ('a' à 'z '), également consécutifs :
Il est donc facile de convertir un seul caractère compris entre '0' et '9' ou entre 'a' et 'f' en valeur numérique comprise entre 0 et 15 : si le code ASCII du chiffre hexadécimal est supérieur ou égal au code ASCII de 'a', il suffit de lui soustraire le code ASCII de 'a' pour obtenir une valeur comprise entre 0 et 5 et de lui ajouter 10 pour obtenir une valeur comprise entre 10 et 15. Si le code ASCII du chiffre hexadécimal est inférieur au code ASCII de 'a', il s'agit donc d'un caractère compris entre '0' et '9'. Il suffit alors de lui soustraire le code ASCII de '0' pour obtenir une valeur comprise entre 0 et 9. On écrira donc la conversion « caractère -> valeur » de cette façon :
A l'inverse, la conversion « valeur -> caractère » s'écrira :
Ce sous-problème étant réglé, il nous reste à écrire le code pour traiter tous les chiffres/caractères du nombre.
Dans le cas d'une conversion « valeur -> chaîne de caractères », il nous faut trouver un moyen d'extraire chacun des chiffres de la valeur. Dans le cas d'une conversion « chaîne de caractères -> valeur », il nous faut trouver un moyen d'assembler chacun des chiffres de la valeur.
Pour l'extraction des chiffres d'une valeur, on peut procéder par divisions par 16 successives, le reste de la division donnant le chiffre hexadécimal de poids faible. On peut réaliser la même chose avec des décalages à droite de 4 bits.
Pour l'assemblage des chiffres d'une valeur, on peut procéder par multiplication par 16 par décalages à gauche de 4 bits.
Vous trouverez dans le fichier ci-dessous le programme corrigé de cet exercice :
Programme du TP 14.2.3 Corrigé