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

ariock Messages postés 125 Date d'inscription   Statut Membre Dernière intervention   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
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
ariock Messages postés 125 Date d'inscription   Statut Membre Dernière intervention   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
EYZO > ariock Messages postés 125 Date d'inscription   Statut Membre Dernière intervention  
 
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