Lecture du bit de poids faible dans un fichier bmp

Fermé
lemarseillais_13 Messages postés 9 Date d'inscription mercredi 16 décembre 2020 Statut Membre Dernière intervention 4 décembre 2021 - Modifié le 4 déc. 2021 à 15:00
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 5 déc. 2021 à 01:29
Bonjour,
Je dois dans un fichier bmp regarder chaque octet après le 54 ième( je commence à lire dans mon fichier à partir de l'octet 54, on enleve l'entète) je doit selectionner le bit de poid faible de chaque octet et le mettre dans un fichier.

Pour cela j'utilise fseek pour me déplacer à l'octet 54, puis j'utilise fgetc(de fichier.bmp) qui vas me donner chaque caractère donc ici des octets puis je souhaite prendre le bit de poids faible de chaque octet et le mettre dans un fichier(exemple : 01011001 10000000 deux octets je souhaite mettre dans un fichier les 2 derniers bits de chaque octets : 10) es ce que quelqu'un aurait une idée svp ?


fseek(fichier,54,SEEK_SET);
 int buffer=0;
  while ((buffer=fgetc(fichier))!= EOF){ //fichier: mon fichier bmp que je lis
    //printf("%c",buffer);
    fprintf(fichierBit , "%c", buffer); //fichierbit le fichier dans lequel je souhaite écrire les bits de poids faible de chaque octet
  }


        fclose (fichier);

A voir également:

3 réponses

yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024 Ambassadeur 1 557
4 déc. 2021 à 16:11
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
Modifié le 4 déc. 2021 à 18:36
Bonjour,

Tu n'indiques pas ce que tu attends dans le fichier destination. Deux bits ça n'est pas un format. La destination devrait recevoir du texte ou des octets.
Un exemple où les 2 bits deviennent les textes "00", "01", "10" ou "11":
  while ( ( buffer = fgetc( fichier ) ) != EOF ) {
    static const char* const  cnv[] = { "00", "01", "10", "11"};
    fprintf( fichierBit , "%s", cnv[buffer&3] ); 
  }
0
yg_be Messages postés 23406 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 décembre 2024 1 557
4 déc. 2021 à 18:41
D'après ce que j'ai compris, le but est d'écrire une séquence de bits dans le fichier de destination, 1 bit pour chaque octet du fichier d'entrée.

Cela serait utile dans le cas d'un travail scolaire de stéganographie, par exemple, au décodage.
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
5 déc. 2021 à 01:29
Salut à tous,

yg_be a donné tous les éléments de réponse. Avec un masque adéquat, on peut utiliser & pour extraire un ou plusieurs bits et | pour appliquer un ou plusieurs bits. Le décalage vers la gauche pourra être utilisé pour simplifier l'écriture des bits en écrivant sur celui de poids faible et en décalant de une position pour laisser la place au bit suivant traité.

J'ajouterai qu'il te faudra traiter 8 char pour récupérer 8 bits et reconstituer un char avant de penser à écrire dans le fichier.

Aussi, on peut remarquer que si c'est le bit de poids faible qui intéresse lemarseillais_13 il peut aussi déterminer si le chiffre est pair ou impair.

S'il est pair ce bit sera à 0, si impair il sera à 1.

Si c'est un exercice, il est cependant probable que le PO doive montrer qu'il sait utiliser les opérateurs bit à bit :-)


Dal
0