Lecture d'octets dans un fichier

RER C - Modifié par cptpingu le 10/03/2014 à 11:54
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 12 mars 2014 à 10:30
Bonjour à tous.

J'ai un petit problème. Voilà, j'essai de copier chaque octet d'un fichier dans un tableau de char, en sachant que tab[n]= valeur du n ième octet du fichier, grâce à cette fonction:

void tab_octet(FILE *f,char *tab)
{
    int i;//brai ISN 
    FILE*debug=fopen("debug.txt","r+");
                                                
    for(i=0;i<nb_octet(f);i++)// nb_octet renvoie le nombre d'octet du fichier (la fonction nb_octet fonctionne très bien )
        {
            fseek(f, i, SEEK_SET);//déplacement octet par octet depuis le début
            fread(&tab[i] , sizeof(char) , 1 , f);
            fprintf(debug,"\n Tab[%x]=%x",i,tab[i]);
        }
    fclose(debug);
}


Le problème, c'est que j'obtiens aléatoirement des "ffff" qui n'ont rien à faire là, comme l'illustre la sortie suivante:


Tab[0]=42
Tab[1]=4d
Tab[2]=36
Tab[3]=fffffff9 <------------voila le problème ici l vrai valeur est f9
Tab[4]=15
Tab[5]=0
Tab[6]=0
Tab[7]=0
Tab[8]=0
Tab[9]=0
Tab[a]=36
Tab[b]=0
Tab[c]=0
Tab[d]=0
Tab[e]=28
Tab[f]=0

ou encore


Tab[530fe]=ffffff84 <--- pourquoi ces "f"?
Tab[530ff]=66
Tab[53100]=20

Je vous remercie ^^

2 réponses

cptpingu Messages postés 3838 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 17 juin 2024 124
10 mars 2014 à 12:00
Bonjour.

J'ai réécrit ton sujet, pour ajouter des balises de code, mettre un vrai titre, et corriger les innombrables fautes d'orthographe... Merci d'y faire attention la prochaine fois.

Pour ton souci:
- Pourquoi utilises-tu "%x" et non "%i" ? C'est la raison pour laquelle tu as des "fff" dans la partie "[]" de ton affichage.
- Pour les "fff" dans la deuxième partie de ton affichage, difficile de te répondre si tu ne fournis pas un petit exemple complet qui compile, avec tous les fichiers d'entrées. (Ne poste pas un fichier de 300 lignes, poste juste un fichier de quelques caractères qui permet de reproduire le problème, ainsi que le code minimaliste complet que tu exécutes).

__________________________________________________________________________________________________
Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
12 mars 2014 à 10:30
Salut,

Ici le fseek est relativement useless , ton fread déplacera le curseur dans le fichier du coup c'est redondant...

Pour les FFFFFetc attention au type de ton tableau ici tu utilises un tableau en char donc si l'octet que tu lis dépasse la valeur max d'un char il reboucle...
exemple:
int main(int argc, char*argv[]) {

  char sc = 0xF9;
  unsigned char uc = 0xF9;

  printf("%#x %#x\n", sc, uc);

  return 0;
}





0
Rejoignez-nous