BiC_Dec2Hex

Fonction Catégorie Version
BIC 01 BiC_Dec2Hex Fonction de Convertion 1.0 - Janvier 2007

Description

But Convertit un nombre décimal en hexadécimal . Par exemple 30 est transformé en "1E"
Prototype (BiC_Dec2Hex Nombre_Dec)
Argument Nombre_Dec - Le nombre en système décimal à convertir - Entier -
Retours Le nombre en système hexadécimal - chaîne -
Var. globales Néant
Description Convertit un nombre entier du système décimal (base 10) en nombre du système hexadécimal (base 16).
Notes Le nombre doit être un entier positif.
La fonction BiC_Hex2Dec fait le contraire.
Exemples

(BiC_Dec2Hex 450)    retourne   "1C2"

(BiC_Dec2Hex 20000)  retourne   "4E20"

(BiC_Dec2Hex -500)   retourne   nil

(BiC_Dec2Hex 0)      retourne   nil

La fonction


   1-  (defun BiC_Dec2Hex (*NbDec / Result Cpt1) 

  2)      (setq Result "")
  3)      (while (and	
  4)                 (= (type *NbDec) 'INT)	
  5)                 (> *NbDec 0)	
  6)              )
  7)              (setq Cpt1 (rem *NbDec 16)	
  8)                    *NbDec (lsh *NbDec -4)
  9)                     Result (strcat	
 10)	 	                           (if (< Cpt1 10)			
 11)                                           (itoa Cpt1)			
 12)                                           (chr (+ 55 Cpt1 ))	
 13)		                           )				
 14)                                   Result
 15)	                        )	
 16)               )	
 17)        )	
 18)   )

Ligne 2 :   On initialise Result à une chaîne vide
Ligne 3 :   Boucle  tant que
Ligne 4 :      le nombre à convertir est un entier 
Ligne 5 :      et qu'il est positif,
Ligne 7 :         place en Cpt1 le reste de la division de *NbDec par 16
Ligne 8 :         et en *NbDec le quotient de *NbDec par 16.
Ligne 9 :         puis en Result le résultat qui sera la concaténation de 
Ligne 10 :            1°) si Cpt1 est inférieur à 10, 
Ligne 11 :                  - le nombre sous forme de chaîne
Ligne 12 :                  -  sinon une lettre de A à F
Ligne 14 :            2°) le résultat de la boucle précédente si c'est le cas.
Ligne 16 :        fin de setq
Ligne 17 :  fin de boucle while - remonte à la ligne 3 si *NbDec est supérieur à 0

Exemple : Nombre 450 à traduire en hexadécimal.

1ère boucle :  Ligne 7,  Cpt1 = 2   - Ligne 8 *NbDec = 28  - Result = "2"
2ème boucle :  Ligne 7,  Cpt1 = 12  - Ligne 8 *NbDec = 1   - Result ="C"+ "2" >> "C2"
3ème boucle :  Ligne 7,  Cpt1 = 1   - Ligne 8 *NbDec = 0   - Result = "1"+ "C2"  >>  "1C2"

rem : fonction divisant, ici, *NbDec par 16 et retournant le reste dans Cpt1 (Correspond à mod en basic).
lsh : décalage logique, ici, de 4 bits vers la droite. Equivaut à diviser par 16 et ne garder que le quotient.
itoa : transforme un entier en chaîne.
chr : retourne un code ASCII en chaîne. >> (chr 65) retourne "A" (Correspond à CHR$ en basic).