cs_mogador
Messages postés33Date d'inscriptionmercredi 18 octobre 2000StatutMembreDernière intervention 4 janvier 2010 19 déc. 2009 à 19:31
Bonjour,
je souhaiterais convertir n'importe quel type de fichier (txt, jpg, avi, exe ...) en fichier binaire ou plutot en fichier texte contenant un suite de 0 et 1. et la meme chose faire le contraire.
FrancoisGauthier
Messages postés21Date d'inscriptionsamedi 1 août 2009StatutMembreDernière intervention20 mai 2011 20 oct. 2009 à 11:30
Ok j'ai compris.
Pour la petite histoire, j'ai tenté l'aventure du exit(printf("")); pour voir si ça "passait" à la compilation.
Je n'ai pas trop pensé aux implications au delà de ça...
Merci Tibur pour tes explications.
cs_tibur
Messages postés101Date d'inscriptionsamedi 9 février 2002StatutMembreDernière intervention 5 mai 2009 20 oct. 2009 à 11:17
La fonction exit prend en paramètre un entier qui est renvoyé à l'OS afin de déterminer pourquoi le programme a quitté. Si tu dois quitter le programme alors qu'aucune erreur n'est survenue, il est de bon gout de faire exit(0).
Dans le cas où ton programme dois quitter suite à une erreur (par exemple si un fichier n'est pas trouvé), la convention veut que tu fasses un exit(n) où n indique ton erreur.
Cela permet à la personne (au script) qui a lancé ton programme de détecter si tout s'est bien passé, ou s'il y a eu une erreur.
Tout ça pour dire que c'est plutôt étrange que ton programme fasse un exit avec comme paramètre le code de retour de la fonction printf.
FrancoisGauthier
Messages postés21Date d'inscriptionsamedi 1 août 2009StatutMembreDernière intervention20 mai 2011 20 oct. 2009 à 11:07
Je ne suis pas sur de bien comprendre...
Selon mon code, la fonction exit() termine le programme en cas d'erreur de lecture de fichier. exit() renvois bien un code en retour, et ce n'est pas 0.
Il est vrai que le code retour de exit() n'est pas exploité plus avant, l'info principale étant transmise à l'utilisateur.
Sur mon implémentation, L28: exit(....) fournit la valeur 10 en retour, qui est comprise par l'environnement comme une fin anormale de programme.
Ai-je manqué quelque chose?
cs_tibur
Messages postés101Date d'inscriptionsamedi 9 février 2002StatutMembreDernière intervention 5 mai 2009 20 oct. 2009 à 10:55
Dans ce cas, écris:
printf("FILE NOT FOUND\n");
exit(1);
Un programme doit renvoyer une valeur lorsqu'il quitte. Par convention, il renvoie 0 quand tout c'est bien passé et autre chose sinon.
Pour info, printf renvoie:
On success, the total number of characters written is returned.
On failure, a negative number is returned.
FrancoisGauthier
Messages postés21Date d'inscriptionsamedi 1 août 2009StatutMembreDernière intervention20 mai 2011 20 oct. 2009 à 10:49
La valeur de retour de printf() n'est pas utilisée. Dans le cas de ce code, elle ne renverrait jamais de code erreur (sauf peut être en cas de panne du périphérique concerné: l'ecran. Comme ça ne m'est jamais arrivé, je ne suis pas sur, mais il semble que cela puisse être le cas.)
J'aurai pu utiliser puts() plutot que printf(), puisque il n'y a aucun code format en jeu. L'idée était simplement de fournir a l'utilisateur un message d'erreur simple: "Le fichier n'est pas présent a cet endroit" si le pointeur sur fichier renvoie NULL.
exit(puts("FILE NOT FOUND\n"));
// Affiche le message d'erreur à l'écran et termine le programme.
cs_tibur
Messages postés101Date d'inscriptionsamedi 9 février 2002StatutMembreDernière intervention 5 mai 2009 20 oct. 2009 à 09:07
Le truc c'est que je vois pas pourquoi tu fais un exit de la valeur de retour de printf. Voila ce que renvois printf:
Return Value
On success, the total number of characters written is returned.
On failure, a negative number is returned.
L'intérêt que ton main renvois une valeur, c'est de pouvoir identifier l'erreur. Alors pourquoi renvoyer ça ?
FrancoisGauthier
Messages postés21Date d'inscriptionsamedi 1 août 2009StatutMembreDernière intervention20 mai 2011 20 oct. 2009 à 00:34
Il teste le pointeur sur fichier. S'il renvoi NULL, le fichier n'est pas là. Peut être aurais-je du faire une boucle pour permettre à l'utilisateur de ressaisir le chemin de fichier plutôt que de faire appel à EXIT, c'est vrai.
Merci!
cs_tibur
Messages postés101Date d'inscriptionsamedi 9 février 2002StatutMembreDernière intervention 5 mai 2009 20 oct. 2009 à 00:25
C'est quoi, l'intérêt du exit(printf("\nFILE NOT FOUND\n")); ?
19 déc. 2009 à 19:31
je souhaiterais convertir n'importe quel type de fichier (txt, jpg, avi, exe ...) en fichier binaire ou plutot en fichier texte contenant un suite de 0 et 1. et la meme chose faire le contraire.
#include <stdio.h>
int main(int argc, char **argv) {
/*
FILE *fp;
fp=fopen("test.c", "wb");
char x[10]="ABCDEFGHIJ";
fwrite(x, sizeof(x[0]), sizeof(x)/sizeof(x[0]), fp);
*/
FILE *fp;
fp=fopen("test.c", "rb");
char x[10];//="ABCDEFGHIJ";
fread(x, sizeof(char), 10, fp);
printf("%d================",sizeof(x));
printf("\n");
for(int i=0;i<sizeof(x);i++)
{
printf("%x==========",x[i]);
//printf("\n");
for(int j=7;j>=0;j--)
{
//printf("(%d)",j);
printf("%d",(x[i]>>j)&(255>>7));
}
printf("\n");
}
}
Merci pour votre aide.
sed
20 oct. 2009 à 11:30
Pour la petite histoire, j'ai tenté l'aventure du exit(printf("")); pour voir si ça "passait" à la compilation.
Je n'ai pas trop pensé aux implications au delà de ça...
Merci Tibur pour tes explications.
20 oct. 2009 à 11:17
Dans le cas où ton programme dois quitter suite à une erreur (par exemple si un fichier n'est pas trouvé), la convention veut que tu fasses un exit(n) où n indique ton erreur.
Cela permet à la personne (au script) qui a lancé ton programme de détecter si tout s'est bien passé, ou s'il y a eu une erreur.
Tout ça pour dire que c'est plutôt étrange que ton programme fasse un exit avec comme paramètre le code de retour de la fonction printf.
20 oct. 2009 à 11:07
Selon mon code, la fonction exit() termine le programme en cas d'erreur de lecture de fichier. exit() renvois bien un code en retour, et ce n'est pas 0.
Il est vrai que le code retour de exit() n'est pas exploité plus avant, l'info principale étant transmise à l'utilisateur.
Sur mon implémentation, L28: exit(....) fournit la valeur 10 en retour, qui est comprise par l'environnement comme une fin anormale de programme.
Ai-je manqué quelque chose?
20 oct. 2009 à 10:55
printf("FILE NOT FOUND\n");
exit(1);
Un programme doit renvoyer une valeur lorsqu'il quitte. Par convention, il renvoie 0 quand tout c'est bien passé et autre chose sinon.
Pour info, printf renvoie:
On success, the total number of characters written is returned.
On failure, a negative number is returned.
20 oct. 2009 à 10:49
J'aurai pu utiliser puts() plutot que printf(), puisque il n'y a aucun code format en jeu. L'idée était simplement de fournir a l'utilisateur un message d'erreur simple: "Le fichier n'est pas présent a cet endroit" si le pointeur sur fichier renvoie NULL.
exit(puts("FILE NOT FOUND\n"));
// Affiche le message d'erreur à l'écran et termine le programme.
20 oct. 2009 à 09:07
Return Value
On success, the total number of characters written is returned.
On failure, a negative number is returned.
L'intérêt que ton main renvois une valeur, c'est de pouvoir identifier l'erreur. Alors pourquoi renvoyer ça ?
20 oct. 2009 à 00:34
Merci!
20 oct. 2009 à 00:25