| N° | Fonction | Catégorie | Version |
|---|---|---|---|
| BIC 02 | BiC_Hex2Dec | Fonction de Convertion | 1.0 - Janvier 2007 |
| But | Convertit un nombre hexadécimal en décimal. Par exemple "1E" est transformé en 30 |
| Prototype | (BiC_Dec2Hex Nombre_Hexa) |
| Argument | Nombre_Hexa - Le nombre hexadécimal à convertir - Chaîne ou Entier - |
| Retours | Le nombre en système décimal - entier - |
| Var. globales | Néant |
| Description | Convertit un nombre entier du système hexadécimal (base 16) en nombre du système décimal (base 10). |
| Notes | Le nombre doit être un entier positif. Il peut être donné sous forme de chaîne ou d'entier. Attention : Vous aurez un résultat aberrant, sans message d'erreur, si : - Le nombre est négatif. - Le nombre ne correspond pas à un nombre hexadécimal. La fonction BIC_Dec2Hex fait le contraire de cette fonction. |
| Exemples | (BiC_Hex2Dec "2D5") retourne 725 (BiC_Hex2Dec "2d5") retourne 725 (BiC_Hex2Dec "4E20") retourne 20000 (BiC_Hex2Dec 1000) retourne 4096 (BiC_Hex2Dec 0) retourne 0 Autres exemples aux résultats aberrants (BiC_Hex2Dec -50) retourne -688 (BiC_Hex2Dec "AZE") retourne 3134 |
1- (defun BiC_Hex2Dec (*NbHex / Result Cpt1 Str1) 2- (if (= (type *NbHex) 'INT) 3- (setq *NbHex (itoa *NbHex)) 4- ) 5- (setq Result 0 6- Cpt1 0) 7- (while (and 8- (= (type *NbHex) 'STR) 9- (< Cpt1 (strlen *NbHex)) 10- ) 11- (setq Cpt1 (1+ Cpt1) 12- Str1 (strcase (substr *NbHex Cpt1 1)) 13- Result (+ (lsh Result 4) 14- (- (ascii Str1) 15- (if (<= Str1 "9") 48 55) 16- ) 17- ) 18- ) 19- ) 20- )
Ligne 2 : Si le nombre à convertir est un nombre entier,
Ligne 3 : le transformer en chaîne.
Ligne 5 : Initialisation de Result
Ligne 6 : et du compteur Cpt1
Ligne 7 : Boucle tant que
Ligne 8 : *NbrHex est une chaîne
Ligne 9 : et que Cpt1 est inférieur à la longueur de *NbHex
Ligne 11 : Incrémente le compteur de boucle de 1
Ligne 12 : Donne à Str1 la valeur de la majuscule de la lettre numéro Cpt1 de *NbHex
Ligne 13 : et à Result la somme de la multiplication par 16 de la boucle précédente
Ligne 14 : diminué de la différence entre la valeur ASCII de Str1 et
Ligne 15 : 48 si Str1 est inférieur ou égal à 9, sinon 55
Ligne 19 : fin de boucle while - remonte à la ligne 7 si Cpt1 est inférieur au nombre de
caractères de *NbHex
Exemple : Nombre "2D5" à traduire en décimal.
1ère boucle: Ligne 11 Cpt1 = 1 L. 12 Str1 ="2" L. 13 : 0 - Result= 0 +(50-48) = 2
2ème boucle: Ligne 11 Cpt1 = 2 L. 12 Str1 ="D" L. 13 : 32 - Result= 32 +(68-55) = 45
3ème boucle: Ligne 11 Cpt1 = 3 L. 12 Str1 ="5" L. 13 : 720 - Result= 720 +(53-48)= 725