Le piège des variables non typées

 

Un exemple de problême qui peut survenir à cause des variables non typées :
Conversion d'un nombre décimal compris entre 0 et 255 en hexadécimal.
On suppose que l'on veuille afficher le résultat grâce à un texte dynamique.

Les nombres hexadécimaux sont en base 16, alors on aura 0123456789ABCDEF
( A =10, B=11, C=12, D=13, E=14, F=15 )
Par exemple 255 = (15)x16 + (15) donne FF.
127 = (7)x16 + (15) donne 7F.
Il faut donc récupérer les 2 dans une variable texte dynamique.
Pour le poids fort, on fait x = (nombre >> 4) c'est une division entière par 16
Pour le poids faible, on récupère le reste, soit y = nombre - (x << 4)
Et ensuite txtdyn = x + y.
Si x et y sont tous deux des chiffres ( 0....9) , çà retournera la somme !
Ce n'est pas ce que l'on veut !
ex : 120 = (7)x16 + 8 ===> 78 en hexa
or txtdyn affichera 7+8 = 15 !!!
Dans les autres cas, aucun pb puisqu'il y aura une des lettres A...F
Autrement dit, il y aura bug sournois.

Ma solution :
function dec2hex( xxx )
{
      if ( xxx == 0 ) return "00"; // pourquoi s'embarrasser?

      hexchar ="0123456789ABCDEF"; // tous les car hexa

      yyy = (xxx >> 4); // nombre /16 division entière
      hb = hexchar.charAt(yyy); // high byte
      zzz = xxx - (yyy << 4);
      lb = hexchar.charAt(zzz); // low byte
      str = String(hb) add String(lb); // transtypage !
      // et là, çà marche à tous les coups !
      return str.toUpperCase();
}

Appel : txtdyn = dec2hex( un_nombre );

 


Si vous aimez le site

 

Select a language if you need :


Page chargée en 0.003 sec.

Dernière Modification : Mer 25 Janvier 2017 8:56
Copyright © 1999-2017 Jean-Paul Molina Tous droits réservés.

vers Google