Un peu de C++ ....

EYZO -  
 EYZO -
bonjour,
voici un petit probleme de C++ disons, heu... croustillant.

j'ai un char buffer[3] contenant 3 valeurs en ASCII, correspondant a 3 valeurs en hexa.
exemple :
buffer[0]=49
buffer[1]=49
buffer[2]=99
soit la valeur 11c en hexa , equivalent a 011c (meme valeur en hexa)

j'ai un unsigned char output[7] vide.
j'ai besoin de mettre la valeur 01 de l'exemple dans output[1]
et 1c dans output[0]
de sorte que ouput[0] et ouput[1] "colles" donnent la suite 1c01 : on inverse l'ordre et on rajour un 0.

la difficulte est de mettre 2 cases de buffer[] d'une valeur en hexa coddee en ASCII dans une seule case de output[] en hexa et PAS en ASCII

Comment fait-on?

1 réponse

  1. ariock Messages postés 125 Statut Membre 5
     
    pour faire ca moi je passerait simplement par un int et des petites chipoteries...
    output [0] c'est simple si ton in ne fait que trois ca veux dire qu'il commence toujours pas 0, et donc tu transfert comme suis :
    output[0] = buffer[0]-48;
    !! a condition de savoir que tu n'est pas passer au dessus de 9 sinon il faudra faire un petit switch() pour transformer la valeur caractere en valeur nombre...

    pour output[1] :

    int tmp;
    switch(buffer[1])
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
    case 0:
    tmp = buffer[1]-48; (faudra peut-etre un casting int);
    break;
    case 'a'
    case 'b'
    case 'c'
    case 'd'
    case 'e'
    case 'f'
    tmp = buffer[1]-87;
    }
    puis rebelote avec buffe[2] et tmp+= au lieu de =;

    Je suis un gaucher contrariant. C'est plus fort que moi,
    il faut que j'emmerde les droitiers.
    0
    1. EYZO
       
      pour la premiere partie de la valeur de l'exemple 011c, le 01 ne varie que de 00 a 04 donc pas de pb.

      par contre, je ne vois pas d'ou sort le 87 de
      tmp = buffer[1]-87
      0
      1. ariock Messages postés 125 Statut Membre 5 > EYZO
         
        le 87, c'est la code ascii de C (99) - 12 la valeur qu'on veux en numerique...

        Je suis un gaucher contrariant. C'est plus fort que moi,
        il faut que j'emmerde les droitiers.
        0
      2. EYZO > ariock Messages postés 125 Statut Membre
         
        ton idee etait bonne!

        le resultat final done ca et ca marche tres bien!
        m_ucOutBuffer[1]=outputbuffer[0]-48; // giving the value to m_ucOutBuffer[1]

        int tmp; ////////////// giving the value to m_ucOutBuffer[1]//////////
        switch(outputbuffer[1])
        {
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
        case '0':
        tmp = (outputbuffer[1]-48);
        break;
        case 'a':
        case 'b':
        case 'c':
        case 'd':
        case 'e':
        case 'f':
        tmp = (outputbuffer[1]-87);
        }

        switch(outputbuffer[2])
        {
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
        case '0':
        tmp = ((tmp*16)+(outputbuffer[2]-48));
        break;
        case 'a':
        case 'b':
        case 'c':
        case 'd':
        case 'e':
        case 'f':
        tmp = ((tmp*16)+(outputbuffer[2]-87));
        }
        m_ucOutBuffer[0]= tmp; //end/// giving the value to m_ucOutBuffer[1]///end///////


        Merci!
        0