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

  • Votes
  • Date
  • Date décroissante
  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.
    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
    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.
    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!