Lire un fichier binaire bit par bit

Signaler
Messages postés
16
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
16 avril 2008
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
Bonjour,
Voila mon problème :
j'ai un fichier binaire à lire, et j'utilise un "ifstream" puit get... Ca marche très bien, mais ça lit les données octets par octets, que je met en hexa, j'obtiens alors un truc du genre 'f8    56    4c    0'. Dans certain cas j'aurais besoin de lire bit par bits. Fait, je souhaiterai savoir s'il existe une fonction pour lire bit par bit, ou même pour extraire d'un int la valeur binaire. Merci

3 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
La plus petite valeur adressable est l'octet (8 bits).
Un 'int' EST une valeur binaire.

ciao...
BruNews, MVP VC++
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
1. On ne lit pas un fichier octet par octet et encore moins bit par bit (si c'était fesable). On extrait le fichier au complet dans un buffer puis on le parcoure avec un pointeur ou on lit par bloc de quelque ko voir mo.

2. On n'extrait pas une valeur binaire d'un int tout simplement parce qu'un int est déjà en binaire tout comme un char, un long etc. Si tu veux tester un bit, on utilise les opérateurs binaires &(AND) |(OR) ^(XOR) et autre. Par exemple, pour tester le premier bit d'un char:

if(valeur & 1) printf("Le premier bit de valeur est non nul");

le 3ème bit

if(valeur & 4) printf("Le 3ème bit de valeur est non nul");

le 5ème

if(valeur & 16) printf("Le 5ème bit de valeur est non nul");

etc. etc.

Ceci dit, pour tout un fichier, ça risque de prendre un temps énorme même avec des pointeurs.

C++ (@++)
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Salut,

Y a les champs de bits qui peuvent peut être aussi t'améliorer un peu la lisibilité et la simplicité.

M'enfin méfiance avec ces trucs : ça peut faire du code très lent. Toujours essayer de bosser avec des structures de taille multiple de 8.