Conversion HEXA/ASCII et ASCII/HEXA en C
Catégorie : Autres ressources
Publié par david le 10/09/2006
Ce soft permet de convertir une valeur hexa  en valeur ASCII ou décimale (dans ce cas il faut enlever +0x30)

unsigned int SciDec2Hex(void)
  {
    unsigned char CENTAINES;
    unsigned char DIZAINES;
    unsigned char UNITES;
    unsigned int TRAITEMENT;
   
    CENTAINES=(SciLireCar()-0x30);
    SciEnvoieCar(CENTAINES+0x30);
    DIZAINES=(SciLireCar()-0x30);
    SciEnvoieCar(DIZAINES+0x30);
    UNITES=(SciLireCar()-0x30);
    SciEnvoieCar(UNITES+0x30);
   
    TRAITEMENT=(CENTAINES*0x64);
    TRAITEMENT=(TRAITEMENT+(DIZAINES*0xA));
    TRAITEMENT=(TRAITEMENT+UNITES);
   
   
    return TRAITEMENT;
  }
On convertit une valeur décimale vers une valeur hexa, l'aquisition se fait depuis la SCI mais on peut facilement le modifier.
La valeur limite est 999, on peut une fois de plus le modifier pour aller plus loin

void SciHex2Dec(unsigned int DATA_HEX)
  {
    unsigned char CENTAINES;
    unsigned char DIZAINES;
    unsigned char UNITES;
   
    CENTAINES=0;
    DIZAINES=0;
    UNITES=0;
   
    if (DATA_HEX>0x63)
    {
        CENTAINES=(unsigned char)(DATA_HEX/100);
        DIZAINES=(unsigned char)((DATA_HEX%100)/10);
        UNITES=(unsigned char)(DATA_HEX-CENTAINES*100-DIZAINES*10);
      }

    if (DATA_HEX<=0x63)
      {
        CENTAINES=0;
        DIZAINES=(unsigned char)(DATA_HEX/10);
        UNITES=(unsigned char)(DATA_HEX%10);
      }

    SciEnvoieCar(CENTAINES+0x30);
    SciEnvoieCar(DIZAINES+0x30);
    SciEnvoieCar(UNITES+0x30);
  }

Ici c'est le contraire, on envoie une valeur hexa vers une valeur ASCII, on envoie le résultat vers la SCI
la limite est aussi 999 ici, la modification est un peu plus complexe mais se fait par tranche de 1000, ensuite 10000, ....