Le binaire en C

Résolu
Heureka - 28 juil. 2012 à 11:56
 Utilisateur anonyme - 30 juil. 2012 à 23:04
Bonjour a tous !

Je suis nouveau dans Code-SourceS et je suis débutant en C mais j'arrive a me débrouiller

Je poste ici (en espérant ne pas mettre tromper de section !) pour avoir quelques informations sur la lecture d'un fichier en binaire !

J'ai fait un programme qui lis un fichier (n'importe lequel) et le copie dans un autre, c'est un peu un système de copié collé.
Pour y parvenir j'ouvre mon fichier d'origine avec le mode de lecture rb -> read binary (si je ne me trompe pas) ainsi qu'a wb -> write binary pour mon fichier cible.

Bien que mon programme soit opérationnel je n'es pas compris comment fonctionnais ces modes d'ouverture !

Quand j'avais commencé mon programme, j'avais essayé d'ouvrir un fichier puis d'afficher son contenu, je m'attendais a des bit, enfin des 0 et des 1 mais au lieu de ca, j'ai eu des nombres !

Croyant que cela allais pouvoir copié mon fichier d'origine je me mis a coder une fonction qui allais copié caractère par caractère mon fichier d'origine dans mon fichier cible, j'ai utilisé la fonction fgetc, voici un extres de mon ANCIEN code :

fprintf(cible, "%d", fgetc(source));

Une fois tout les caractères copié j'ai essayé d'ouvrir mon fichier cible (qui aurai du être une image) mais il y as une belle erreur comme quoi il n'y avais aucun aprecu (de l'image) disponible.

J'ai donc remplacer mon %d par un %c ( soit : fprintf(cible, "%c", fgetc(source)) ) et cette fois ci j'avais bien mon image de copié !

Mes questions sont, comment avoir les 0 et 1 qui compose le fichier ?
Pourquoi un %c ou lieu d'un %d ?
Comment fonctionne le mode d'ouverture binaire ?

Voila, en espérant avoir été assez précis.
Merci d'avance.

5 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
30 juil. 2012 à 11:14
Bonjour.

je sais ce qu'est le binaire !

Oui et non... Tu sais que le binaire c'est des 0 et des 1, un langage machine etc... Mais je pense que Pylouq a bien analysé le problème et que tu as effectivement mal compris ce qu'était la *représentation* numérique. Je te rassure, tous les débutants sans exception ont du mal.


Pour simplifier, tout est valeur. Seule la représentation change. On est bien d'accord que 1000 et 10^3 c'est pareil ?
Et bien en informatique 1000, 10^3, 0x3E8 et 001111101000 c'est aussi la même chose !

Un exemple en C pour l'illustrer:
#include <stdio.h>

int main(void)
{
  // a, b, c et d ont la même valeur !
  int a = 65;
  int b = 'A';
  int c = 0b01000001;
  int d = 0x41;

  printf("%i %i %i %i\n", a, b, c, d); // Affichera 65 65 65 65

  return 0;
}

Ici, on voit bien que seule la valeur est importante. La représentation que l'on a donné à la base n'est pas importante.
A noter que tu peux forcer un type de représentation lors de l'affichage:
#include <stdio.h>

int main(void)
{
  int a = 65;

  printf("%i %c 0x%x\n", a, a, a); // Affichera 65 A 0x41

  return 0;
}


Enfin, si tu veux afficher la représentation binaire d'une valeur, sache que printf ne le fait pas (il n'y a pas de "%b"). Il te faudra le coder (ce n'est pas très dur).

Pour conclure, il faut bien différencier la valeur et la réprésentation qui sont deux choses différentes et non liées.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
3
Utilisateur anonyme
29 juil. 2012 à 13:35
Salut,

Quand j'avais commencé mon programme, j'avais essayé d'ouvrir un fichier puis d'afficher son contenu, je m'attendais a des bit, enfin des 0 et des 1 mais au lieu de ça, j'ai eu des nombres !

Comment ça tu as eu des nombres ? Ton fichier contenait quoi à l'origine ? Pour ce qui est des 0 et des 1,ce n'est qu'une représentation. Le binaire est le langage machine, et un fichier binaire contient des infos dans ce langage. Mais ce n'est pas une succession de 0 et 1, car ces chiffres sont juste une image. Tu as bien les numérotations binaires (comme les octaux, décimaux, héxadécimaux) avec tes 0 et 1 mais ce n'est pas la même chose.

Sinon, de mémoire, %d fait référence au format décimal de valeurs, alors que %c fait référence aux caractères. Donc tu lis ou écris des caractères, %c est plus approprié %d.

--
Pylouq
Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.
0
Merci pour ta réponse !

A l'origine ? Et bien rien !
C'est un fichier créer par le biais de la commande wb comme je l'es dis.

Je suis débutant mais tout de même, je sais ce qu'est le binaire !

Par contre j'ai pas compris :
et un fichier binaire contient des infos dans ce langage. Mais ce n'est pas une succession de 0 et 1, car ces chiffres sont juste une image.


L'ordinateur ne comprend que le binaire, tout est codé dans ce langage.

%d fait bien référence au format décimal en effet mais pourquoi %c ferais plus l'affaire ?

C'est pas très précis toussa
0
Super explications, merci pour ta réponse !

Je comprends maintenant, la valeur reste la même mais la représentation est juste différente !

J'ai vus des bouts de code sur internet pour afficher un nombre en binaire, je sais qu'il faut utiliser les opérateur "<<" et ">>", je vais regarder ca de plus prés.

Encore merci pour ta réponse !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
30 juil. 2012 à 23:04
Utiliser "<<" et ">>" pour faire de l'affichage en binaire . Peut être en C++ quand tu veux afficher sur la sortie standard mais, en C, il s'agit d'opérations de décalage de bits ce qui est différent^^

Bon courage pour la suite !


--
Pylouq
Heureux sont ceux qui lisent le Réglement, ils ne finiront peut-être pas au bûcher.
0
Rejoignez-nous