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 fichier binaire


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 284
    Par défaut lecture fichier binaire
    Bonjour,

    je souhaite lire un fichier contenant des informations binaires(que des 0 et 1)
    par ex:
    0001
    1001101
    ...
    ensuite stocker ces informations dans un vecteur. Je declare mon vecteur comme un vecteur d'entier et ça ne marche pas ( à la place de trouver 0001, je trouve juste un 1!!! vu que c'est un entier)

    Merci pr vos reponses!!!

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Pour lire un fichier binaire, tu ouvres ton fichier en mode binaire en appelant la fonction fopen() avec le mode "rb". Pour lire le fichier, utilise la fonction fread() et n'oublie pas de refermer ton fichier avec fclose() après utilisation.

    Fais de ton mieux, poste un bout de code et n'hésite pas à poser des questions précises au sujet des problèmes que tu rencontres.

    Citation Envoyé par ouinih
    ensuite stocker ces informations dans un vecteur. Je declare mon vecteur comme un vecteur d'entier et ça ne marche pas ( à la place de trouver 0001, je trouve juste un 1!!! vu que c'est un entier)
    Et? 0001 est la représentation binaire sur 4 bits de la valeur 1. Ce n'est pas ce que tu cherches?

    EDIT: J'suis fatigué! C'est bien fread() qu'il faut utiliser pour lire un fichier binaire...

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    pour lire le fichier binaire, tu dois utiliser la fonction fread.

    tu as deux possibilités de stockage de ton information :
    - stocker de manière décomposée 0 0 0 0 0 0 0 1 dans un tableau d' int.
    - stocker l'information compressée (comme dans le fichier) 00000001, mais il te faudra faire des manipulations bit à bit pour accéder à l'information que tu souhaites.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 284
    Par défaut
    voila j'ai fait un petit prog qui me permet de lire un fichier: je lis d'abord la taille qui est un entier ensuite les données binaires.

    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
    23
    24
    25
    26
    27
    28
    29
    30
     
    #include <stdio.h>
     
    int main ()
    {
      int j, i;
      FILE *src = NULL;
      int size;
      char* mot;
      char* tab[12];
     
     
    src = fopen ("huffman_AC.txt", "rb");
    if(src == NULL)
    {
           printf("pb ouverture fichier\n");
    }
     
    for (i=0;i<12;i++)
    {
        fscanf(src," %d %s",&size, &mot);
        printf("voila data %d ; %s \n", size, &mot);
        tab[i] = &mot;
        printf("voila tab %s \n",&mot);
    }   
      fclose(src);
      system ("pause");
     
      return 0;
    }
    Le pb c'est : dans le cas où la valeur de la taille ds mon fichier est égale à 2 ça marche ( ça marche de 0 jusqu'au 3) Mais lorsque la taille vaut 5 le prog m'acffiche 48 à la place. Je ne vois pas d'où ça peut venir!!


  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Ce n'est pas un fichier binaire que tu as, mais un fichier texte contenant la représentation binaire de nombre entier.
    • Tu dois ouvrir ton fichier en mode texte ("r")
    • Si l'ouverture de ton fichier échoue, ton programme n'est pas protégé. En particulier, appeler fclose() avec la valeur NULL engendre un comportement indéterminé.
    • Si les entiers stockés dans le fichier sont représentés en base 2, tu ne peux pas te servir de fscanf(). Il te font faire tes propre fonction de saisie à base de fgets() et en effectuant la conversion à la main.
    • Dans ton appel à printf(), le spécificateur de format %s attend un argument de type pointeur sur char et non un argument de type pointeur sur tableau de char. Tu dois donc passer mot et non &mot.
    • Idem pour tab[i] qui est de type pointeur sur char: tab[i] = mot;
    • system("pause") est inutile avec les EDI modernes. Par ailleurs, tu as oublié d'inclure stdlib.h


    Voici ce que dit mon compilateur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    gcc -o test.o -c -Wall -Wextra -ansi -pedantic -Wwrite-strings -Wstrict-prototypes -Wunreachable-code -std=c89 test.c
    test.c:4: warning: function declaration isn't a prototype
    test.c: In function 'main':
    test.c:20: warning: format '%s' expects type 'char *', but argument 4 has type 'char **'
    test.c:21: warning: format '%s' expects type 'char *', but argument 3 has type 'char **'
    test.c:22: warning: assignment from incompatible pointer type
    test.c:23: warning: format '%s' expects type 'char *', but argument 2 has type 'char **'
    test.c:26: warning: implicit declaration of function 'system'
    test.c:5: warning: unused variable 'j'
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

Discussions similaires

  1. Lecture fichier binaire et inversion d'octets
    Par zoro_le_renard dans le forum Fortran
    Réponses: 8
    Dernier message: 17/07/2007, 20h35
  2. Lecture fichier binaire
    Par djidji dans le forum Langage
    Réponses: 1
    Dernier message: 09/11/2006, 11h58
  3. Réponses: 5
    Dernier message: 02/10/2006, 22h54
  4. Lecture fichier binaire
    Par kek_net dans le forum Langage
    Réponses: 5
    Dernier message: 07/08/2006, 19h37
  5. Lecture fichier binaire
    Par gabule dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 30/05/2006, 15h53

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