Valeur2 n'est jamais initialisé.
Tu dois faire un truc de ce genre:
Code:
1
2 valeur2 = LireEntierBigEndian(valeur1); EcrireEntierLittleEndian(valeur2, valeur1);
Version imprimable
Valeur2 n'est jamais initialisé.
Tu dois faire un truc de ce genre:
Code:
1
2 valeur2 = LireEntierBigEndian(valeur1); EcrireEntierLittleEndian(valeur2, valeur1);
deja dans le main tu as un probleme.
tu affiches un int en le formattant string. bizarre que tu n'ais pas eu de warning a la compilation (je pense que VC doit le faire)
j'ai remplacer %s par %d.Code:printf("voici les valeurs inversees : %d\n",valeur2);
ensuite tu as fait int valeur2, sans comme l'a dit medinoc initialiser, et apres tu fais:ca compile avec warning normalement tu devrait plutot tester avec 0 ou -1 ou ce que tu veuxCode:if(valuer2==NULL)
ta fonction de conversion en faite je me demande bien ce qu'elle fait,Code:if(valeur2==0)
elle modifie le contenu du pointeur en entrer avec une valuer (entier) jamais initialiser donc qui contient du garbage. puis tu fais entier>>=8;
mais dis moi, entier etait egal a combient au debut?
et visiblement tu esperes (meme si entier avait ete initialiser) que la fonction modifie le contenu de entier?
tu as deux choix
1/2/Code:valeur2=EcrireEntierLittleEndian(valeur1);
mais vraiment je te conseil la 1/ car sinon on va avoir d'autre probleme.Code:EcrireEntierLittleEndian(valeur1,&valeur2);
calcule tout dans ta fonction en tu renvois le resultat.
enfaite je suis bloqué car je sais pas comment faire
est ce bon comme ça :
merci beaucoup pour votre aide qui m'est vraiment précieuseCode:
1
2
3
4
5
6
7
8
9
10
11
12 int EcrireEntierLittleEndian(char *bytes) { int i; int entier; for(i=0 ; i<sizeof(int) ; i++) { bytes[i] = (char)(entier & 0x000000FF ); return (entier >>= 8); } }
10 x NON
d'abort explique moi ce que fait reelement ta fonction
ensuite visiblement tu ne sait pas utiliser une boucle ou alors tu n'as pas ete attentif en tapant ton code.
le return si tu me mets dans la boucle comme il est la, alors ton FOR ne sert strictement a rien.
j'ecris ca pour donner aun sens a ce que j'ai lut mais je sais pas vraiment si c'est ce que tu veux.Code:
1
2
3
4
5
6
7
8
9
10
11
12 int EcrireEntierLittleEndian(char *bytes) { int i; int entier; for(i=0 ; i<sizeof(int) ; i++) { entier = bytes[i] & 0x000000FF ; entier >>= 8; } return entier; }
en suite c'est quoi cette histoire de sizeof(int).
sur ma machine int vaut 4. mais sur une autre ca peut valoir autre chose.
ne serait-il pas mieux de mettre la taille de valeurs?
bon on en reparlera si ton code marche et que la modification que j'ai apporte marche comme tu veux dans le cas particulier de ton exemple.
apres on vera.
Pourquoi la fonction "LireXxxx" (qui parse un tableau de bytes pour en extraire l'entier) s'est-elle mystérieusement renommée en "EcrireXxxx" (fonctions supposées écrire la valeur d'un entier dans un tableau de bytes) ?