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