Un peu de C++ ....

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. 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. 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
    2. @EYZOle 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
    3. @ariockton 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