Un peu de C++ ....
EYZO
-
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?
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
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.
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.
par contre, je ne vois pas d'ou sort le 87 de
tmp = buffer[1]-87
Je suis un gaucher contrariant. C'est plus fort que moi,
il faut que j'emmerde les droitiers.
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!