Lecture d'octets dans un fichier

RER C - Modifié par cptpingu le 10/03/2014 à 11:54
Twinuts
Messages postés
5373
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
10 août 2022
- 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
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
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
5373
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
10 août 2022
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