IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Lecture avec fread()


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut Lecture avec fread()
    Bonjour,

    voila, j'ai un fichier héxadécimal que je dois lire et en extraire certaines parties, j'utilise donc la fonction fread(), mais dés que la fonction rencontre un octet égal à "00" (equivalent à "\0" je crois..?) et bien elle s'arrete alors qu'en parametre, je lui passe le nombre d'octets à lire...

    Ya t il un moyen d'empecher ça...?

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 380
    Points : 41 576
    Points
    41 576
    Par défaut
    Avec fread(), tu es sûr ?

    Vérifie que tu n'as pas oublié d'ouvrir le fichier en mode binaire.

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut
    oui, c'est bien comme ça ??

    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fread(*dest,1,1024,file)

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 380
    Points : 41 576
    Points
    41 576
    Par défaut
    comment est déclaré et dest ?
    Et qu'est-il supposé valoir lors de l'appel à fread() ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut
    "dest", c'est un parametre de la fonction de type LPSTR

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 380
    Points : 41 576
    Points
    41 576
    Par défaut
    alors pourquoi passes-tu *dest à fread() ?

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par cout
    voila, j'ai un fichier héxadécimal
    C'est quoi ça ? Tu peux joindre un exemple ?

  8. #8
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut
    pour le pointeur, je suis obliger puisque je dois lui allouer de la mémoire depuis cette fonction et il faut que je puisse recuperer son contenu endehors de cette fonction

  9. #9
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut
    Il s'agit d'un fichier (.FIC)d'une base de données proprietaire, il contient du code héxadécimal :

    4E 69 98 A5 00 FF 56....etc

    je l'ouvre avec un éditeur comme WinHex

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par cout
    Il s'agit d'un fichier (.FIC)d'une base de données proprietaire, il contient du code héxadécimal :

    4E 69 98 A5 00 FF 56....etc

    je l'ouvre avec un éditeur comme WinHex
    OK. C'est un fichier binaire que tu visualises en hexadécimal...

  11. #11
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut
    oui c'est vrai...

  12. #12
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut
    C'est donc normal que fread() s'arrete des qu'il rencontre un octet égal à 0x00ou pas...??

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par cout
    C'est donc normal que fread() s'arrete des qu'il rencontre un octet égal à 0x00ou pas...??
    Pas normal. Tu as bien ouvert en "rb" ? On ne va pas jouer ax devinettes. Poste ton code...

  14. #14
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int _stdcall X_LEC_ART_CLE_DTA(WORD lgCle,WORD cdeFicInd,LPSTR cleRech,WORD adNumEnreg,LPSTR src,LPSTR *dest)
    {
             ...............
              if ((file=fopen(src,"rb")) == NULL)
              {
                  return 1;
             }
     
             fseek(file,*adresseEnreg,SEEK_SET);
              fread(*dest,1,*tailleEnreg,file);
     
         .....

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 380
    Points : 41 576
    Points
    41 576
    Par défaut
    Citation Envoyé par cout
    pour le pointeur, je suis obliger puisque je dois lui allouer de la mémoire depuis cette fonction et il faut que je puisse recuperer son contenu endehors de cette fonction
    Donc il est de type LPSTR *, pas LPSTR... Heureusement que j'avais demandé...
    PS: Déclare src en LPCSTR
    PPS: Ta taille d'enregistrement aussi est en sortie ?

  16. #16
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut
    En fait ça lit, puisque lorsque je regarde en debugant le contenu de *dest, il m'affiche seulement les 232 premiers octets alors que je lui en demande 1024, seulement le 233 est le premier octet lu égal à 0x00

  17. #17
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut
    Je dois pas pouvoir modifier le type, puisque je dois refaire une dll 16 bits déja existante mais en 32 bits et du coup je suis obliger de garder les meme prototypes..donc je dois pas pouvoir modifier les types des parametres

    Mais je vois pas pourquoi il pose probleme e parametre src, je m'en sert dans mon code a dautre endroit et ça marche tres bien...

  18. #18
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 380
    Points : 41 576
    Points
    41 576
    Par défaut
    Non, ce n'était pas un problème, c'est juste que c'est plus propre.
    Et puis, si la fonction est possède un prototype C, tu peux changer le type de pointeur sans problème.


    Ton buffer est un char * : C'est le debugger qui se fait avoir, pas fread().

    Tu dois te faire une fonction d'affichage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void PrintHex(char const *pcBuf, size_t length)
    {
    	printf("Contenu du buffer :");
    	for(size_t i=0 ; i<length ; i++)
    	{
    		int n = pcBuf[i];
    		printf(
    		 "%c%02X",
    		 (n%16==0 ? '\n' : ' '),
    		 n
    		 );
    		}
    	printf("\n");
    }

  19. #19
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut
    et la taille d'enregistrement n'est pas en sortie mais je n'est pas reussi a utilisé une variable de type int toute simple sans pointeur..

  20. #20
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Points : 32
    Points
    32
    Par défaut
    Ben en fait j'utilise l'api windows, donc mon projet ne me permet pas d'utiliser la console...et du cou ton code je peux pas trop m'en servir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%c%02X", (n%16==0 ? '\n' : ' '), n );

Discussions similaires

  1. Problème de Lecture avec fread, feof retourne 16
    Par neoangelo5 dans le forum C
    Réponses: 10
    Dernier message: 14/04/2011, 15h37
  2. Réponses: 2
    Dernier message: 11/05/2010, 09h27
  3. lecture avec fread()
    Par salsabouge dans le forum Langage
    Réponses: 18
    Dernier message: 20/10/2008, 16h51
  4. problème lecture avec fread
    Par xeron33 dans le forum C
    Réponses: 1
    Dernier message: 18/06/2008, 23h04
  5. prblme de lecture avec fread ... etrange...
    Par toto4650 dans le forum MFC
    Réponses: 14
    Dernier message: 28/07/2005, 17h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo