Merci de votre solution très élégante avec memcpy mais il était demandé ceci dans l'énoncé :

Envoyé par
sergoid
//resultat[0] = x00;
//resultat[1] = x60;
//resultat[2] = x92;
//resultat[3] = x44;
Votre solution donne les valeurs en sens inverse mais peut-être que cela peut quand même convenir au demandeur, c'est à lui de voir. Je ne crois pas qu'il existe de fonction de recopie dans le sens inverse, il faudrait donc le programmer nous-mêmes par exemple
1 2
| char *ptr=(char*) & valeur;
for(int i=0;i<4;i++) Resultat[3-i]=*ptr++; |
Sinon effectivement, j'ai oublié les lettres hexa (pas assez réveillé peut-être), il faut donc soustraire 48 pour les chiffres et 55 pour les lettres. Donc je corrige juste pour le fun. Je crée un petite fonction d'extraction
1 2 3 4
| char TForm1::Extrac(char c)
{
if(c>57) return c-55; else return c-48;
} |
Dans ces conditions, la boucle de calcul devient
for(int i=0;i<A.Length()/2;i++) Resultat[i]=Extrac(A[i*2+1])*16+Extrac(A[i*2+2]);
Encore une fois, c'est juste pour le fun, des solutions immédiates ont été données. Comme j'ai fait beaucoup d'assembleur par le passé, je suis habitué à chercher moi-même les solutions. Mais en C++, il y a toute une collection de fonctions toutes prêtes.
À bientôt
Gilles
Partager