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.
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 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/portfoliohttp://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
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.
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 !
Vous n’avez pas trouvé la réponse que vous recherchez ?
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.