Votre question

Résolu : C : Comment lire un fichier bit par bit

Tags :
  • Programmation
Dernière réponse : dans Programmation
25 Juillet 2006 13:29:51

Bonjour,

J'aimerais savoir comment faire pour lire un fichier bit par bit et aussi écrire dans celui-ci bit par bit en C ?

Autres pages sur : resolu lire fichier bit bit

25 Juillet 2006 13:48:16

Salut Firelink !

Citation :
J'aimerais savoir comment faire pour lire un fichier bit par bit et aussi écrire dans celui-ci bit par bit en C ?


Simple, il te faut un désassembleur.

Je n'y connais rien d'autre... lol

Tchooooo :-P :-P :-P
25 Juillet 2006 14:03:40

Tiens voila :

  1. int lectureFichier(char *nomFichier){
  2. ifstream fichier (nomFichier);
  3. if (!fichier){
  4. cout << "Erreur : impossible d'ouvrir le fichier en lecture..." << endl;
  5. return -1;
  6. }
  7.  
  8. while( ! fichier.eof() ){
  9. fichier >> nbre;
  10. }
  11. fichier.close();
  12.  
  13. return 1;
  14. }


Ecrit avec le ofstream !
Contenus similaires
25 Juillet 2006 14:09:40

Scuze jvien de relire ton message le code d'avant ne fonctionnera qu'en C++

Voici une solution en C :

  1. void lecture(int *tube, char *nomFichier){
  2.  
  3. //Descripteur de fichier
  4. FILE *fichier;
  5.  
  6. //Chaine de caractere lue
  7. char mot[256];
  8.  
  9. fichier = fopen(nomFichier,"r");
  10. if (fichier == NULL){
  11. printf("Erreur de fichier");
  12. exit(1);
  13. }
  14.  
  15. while (fscanf(fichier,"%s",mot) != EOF){
  16. printf("%s", mot);
  17. }
  18.  
  19. fclose(fichier);
  20. }
25 Juillet 2006 15:43:45

Citation :

Salut Firelink !

Citation:
J'aimerais savoir comment faire pour lire un fichier bit par bit et aussi écrire dans celui-ci bit par bit en C ?

Simple, il te faut un désassembleur.

Je n'y connais rien d'autre... lol

Tchooooo


Salut Dilibouille,

J'aimerais le nom d'une focntion qui soit capable de lire un fichier bit par bit, pas un programme ! ;-)

Citation :

MouT59 a écrit :
Scuze jvien de relire ton message le code d'avant ne fonctionnera qu'en C++

Voici une solution en C :

  1. void lecture(int *tube, char *nomFichier){
  2.  
  3. //Descripteur de fichier
  4. FILE *fichier;
  5.  
  6. //Chaine de caractere lue
  7. char mot[256];
  8.  
  9. fichier = fopen(nomFichier,"r");
  10. if (fichier == NULL){
  11. printf("Erreur de fichier");
  12. exit(1);
  13. }
  14.  
  15. while (fscanf(fichier,"%s",mot) != EOF){
  16. printf("%s", mot);
  17. }
  18.  
  19. fclose(fichier);
  20. }



Salut MouT59,
Ton code lit un fichier mot par mot et non bit par bit ;-)

25 Juillet 2006 18:10:24

Et ben il te suffit de transcrire le mot en bit !
25 Juillet 2006 21:46:45

Et comment faire ? :-D
a b L Programmation
25 Juillet 2006 21:54:20

Il faut lire octet par octet avec par exemple des fread().
Ensuite sur chaque octet, tu peut aisément lire la suite des 8 bits en utilisant des masques binaires.
26 Juillet 2006 10:35:00

Houla ! Je suis un débutant moi ! :-D

Alors je lis octet par octet avec fread(), comment j'utilise cette fonction ?

Citation :
Ensuite sur chaque octet, tu peut aisément lire la suite des 8 bits en utilisant des masques binaires.


Masques binaires ?!
Tu peux m'expliquer ? :-D
26 Juillet 2006 10:50:24

creuse du coté de la fonction

fgetc();

cette fonction prend en paramètre un fichier ou flux, et renvoi un caractère
la premiere fois qu'elle est apelé elle revoi le 1er caractère, la deuxième fois elle revoit le deuxième, ect...,

enfin c'est a creuser
27 Juillet 2006 17:04:50

Ouais mais après comment je fais pour décomposer en octet et appliquer des masques binaires ?
a b L Programmation
27 Juillet 2006 21:04:37

je numérote les bits en partant de la gauche en commançant à 0 (7,6,5,4,3,2,1 et 0)

La liste de masques:
00000001b = 0x01 = 1
00000010b = 0x02 = 2
00000100b = 0x04 = 4
00001000b = 0x08 = 8
00010000b = 0x10 = 16
00100000b = 0x20 = 32
01000000b = 0x40 = 64
10000000b = 0x80 = 128

donc si tu veux savoir si le premier bit est à 0 ou 1, tu fais un ET binaire (dont le résultat est, qu'un bit est mis à 1, si le bit du nombre ET le bit du masque sont à 1)

donc il suffit de tester:
  1. if (nombre & 0x01 == 0x01)
  2. puts("bit 0 mis à 1");
  3. else
  4. puts("bit 0 mis à 0");
  5.  
  6. if (nombre & 0x02 == 0x02)
  7. puts("bit 1 mis à 1");
  8. else
  9. puts("bit 1 mis à 0");
  10.  
  11. if (nombre & 0x04 == 0x04)
  12. puts("bit 2 mis à 1");
  13. else
  14. puts("bit 2 mis à 0");
  15.  
  16. if (nombre & 0x08 == 0x08)
  17. puts("bit 3 mis à 1");
  18. else
  19. puts("bit 3 mis à 0");
  20.  
  21. if (nombre & 0x10 == 0x10)
  22. puts("bit 4 mis à 1");
  23. else
  24. puts("bit 4 mis à 0");
  25.  
  26. if (nombre & 0x20 == 0x20)
  27. puts("bit 5 mis à 1");
  28. else
  29. puts("bit 5 mis à 0");
  30.  
  31. if (nombre & 0x40 == 0x40)
  32. puts("bit 6 mis à 1");
  33. else
  34. puts("bit 6 mis à 0");
  35.  
  36. if (nombre & 0x80 == 0x80)
  37. puts("bit 7 mis à 1");
  38. else
  39. puts("bit 7 mis à 0");
28 Juillet 2006 11:18:04

Je crois que je vais attendre avant de me lancer dans les bit, c'est trop difficile à comprendre !

J'ai testé le code que tu m'as donné, et quelque soit la valeur de nombre (long), tous les bits valent 1...

Merci de votre aide !

Bye
28 Juillet 2006 11:34:10

C'est sur faut pas précipité les choses c'est en apprenant qu'on apprend lol ! ;) 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS