Lecture d'octets dans un fichier

Signaler
-
Messages postés
5358
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
22 janvier 2021
-
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

Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
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
Messages postés
5358
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
22 janvier 2021
105
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;
}