Salut tout le monde, j'ai posé un post équivalent il y a pas longtemps mais le problème n'est plus exactement le même.

J'ai un comportement absurde d'une fonction qui lit un fichier binaire.

La fonction lit les octets un par un à l'aide de fread, les stocke dans un char ptemp[10], puis le ptemp[0] est copié dans un char* temp pour former une string. La raison de ce détournement est que quand je fais fread(chaine, 1, 8, fichier) le fread s'arrête au premier caractère assimilé comme un \0. donc ça ne lit pas 8 octets généralement.

bref.

voici le bout de code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
char ligne[100];
        char temp[100];
        char lignesortie[100];
        int i;
        int valide = 1;
        long compteur = 0;
        int rep;
        char  ptemp[10];
 
//...
 
                                        memset(temp, 0, 100);
                                        for(i = 0 ; i < 8 ; i++)
                                        {
                                                fread( ptemp, 1, 1, fichierentree);
                                                temp[i] = ptemp[0];
                                                //printf("\ntemp[%d]->%c<- dec.->%d<- hex. ->%x<-\net ptemp = %d hex. %x",i,temp[i],temp[i], temp[i], ptemp[0],
ptemp[0]);
                                                printf("\nptemp[0] : ->%c<- ->%d<- ->%x<-", ptemp[0], ptemp[0], ptemp[0]);
 
//...
et voici le résultat :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
ptemp[0] : -> <- ->32<- ->20<-
ptemp[0] : -><- ->-126<- ->ffffff82<-
ptemp[0] : -><- ->0<- ->0<-
ptemp[0] : -><- ->16<- ->10<-
ptemp[0] : -><- ->0<- ->0<-
ptemp[0] : -><- ->1<- ->1<-
ptemp[0] : ->6<- ->54<- ->36<-
ptemp[0] : ->o<- ->111<- ->6f<-

voici l'extrait du fichier à lire (hexa)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
20 82 00 10 00 01 36 6F
quelqu'un peut m'expliquer pourquoi la ligne en rouge? merci