N° |
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).