dayvid75014
Messages postés96Date d'inscriptionmercredi 5 mars 2008StatutMembreDernière intervention25 avril 2008
-
11 mars 2008 à 14:29
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 2009
-
12 mars 2008 à 13:01
Bonjour à tous,
Vous voyez à quoi ressemble un éditeur héxadécimal? un logicilel qui vous affiche les octets contenu dans le fichier ; par exmple, j'ai un fichier MPEG, que je rentre dans l'éditeur et op' en quelques secondes tous mes octets de mon flux s'affiche.. savez-vous comment coder la fonction qui m'afficherait les octets de mon flux sans utiliser l'éditeur ? (au préalable je voudrais que l'utilisateur rentre un chemin de fichier)
1)Récupération des info de la ligne de commande (filepath)
2)Lecture des octets du flux vidéo
3)Affichage de ces octets tel un éditeur héxadécimal
Suggestion (qui ne marche pas sinon je ne vous demanderais pas ):
FILE *ip_file;
char *ip_filepath;
int main(int argc, char *argv[])
{
if (argc == 1)
{
display_usage();
exit_prog("");
}
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 11 mars 2008 à 22:00
Voila un code tester:
il affiche les 50 premiers octets de ton fichier
#include "windows.h"
#include "stdio.h"
int main(int argc, char *argv[])
{
FILE *ip_file=NULL;
char ip_filepath[260];
int ip_file_length=0,i;
int size;
if (argc == 1) //S'il n'y a pas d'argument on demande a l'utilisateur d'entrer la chaine
{
printf("Entrer le chemin de la video:\n");
//scanf("%s",ip_filepath); //Attention n'accepte pas les espaces
gets(ip_filepath); //Accepte tout jusqu'à l'appuie sur entrer
}
else //on a entrer une chaine en argument du main (en passant par l'invite de commande)
{
strcpy(ip_filepath,&argv[1][0]); //ip_filepath pointe sur le premier argument premier caractere
}
ip_file = fopen(ip_filepath, "rb");
if(ip_file==NULL){ //test obligatoire
printf("Erreur a l'ouverture du fichier\n");
exit(0);
}
fseek (ip_file , 0, SEEK_END); //On se place a la fin du fichier
ip_file_length=ftell (ip_file ); //Retourne le nombre d'octet depuis le debut du fichier jusqu'a la position du curseur(ici la fin)
rewind (ip_file); //on se replace au debut du fichier
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 11 mars 2008 à 15:02
Salut
FILE *ip_file=NULL;
char *ip_filepath=NULL;
int main(int argc, char *argv[])
{
int size;
if (argc == 1)
{
display_usage();
exit_prog("");
ip_filepath = &argv[1][0]; //ip_filepath pointe sur le premier argument premier caractere
ip_file = fopen(ip_filepath, "rb");
if(ip_file==NULL){ //test obligatoire
printf("Erreur a l'ouverture du fichier\n");
exit(0);
}
fseek (ip_file , 0, SEEK_END); //On se place a la fin du fichier
ip_file_length=ftell (ip_file ); //Retourne le nombre d'octet depuis le debut du fichier jusqu'a la position du curseur(ici la fin)
char *Buffer=new char[ip_file_length];
fread(Buffer,sizeof(char),ip_file_length,ip_file); //On a tout le fichier recopier dans le Buffer
fclose(ip_file);
int main(int argc, char *argv[])
{
int size=0;
if (argc == 1)
{
//display_usage();
exit_prog("");
ip_filepath = &argv[1][0]; //ip_filepath pointe sur le premier argument premier caractere
ip_file = fopen(ip_filepath, "rb");
if(ip_file==NULL)
{ //test obligatoire
printf("Erreur a l'ouverture du fichier\n");
exit(0);
}
fseek (ip_file , 0, SEEK_END); //On se place a la fin du fichier
ip_file_length=ftell (ip_file ); //Retourne le nombre d'octet depuis le debut du fichier jusqu'a la position du curseur(ici la fin)
char *Buffer=new char[ip_file_length];
fread(Buffer,sizeof(char),ip_file_length,ip_file); //On a tout le fichier recopier dans le Buffer
fclose(ip_file);
int i =0;
for(i=0 ; i<ip_file_length ; i++)
{
printf("%c\t",Buffer[i]); //Tu affiches tes octets
dayvid75014
Messages postés96Date d'inscriptionmercredi 5 mars 2008StatutMembreDernière intervention25 avril 2008 11 mars 2008 à 15:39
je mets le code que tu vois ci-dessus dans visualC++ et je fais compiler puis assembler et là la console apparait et m'affiche ce que tu sais : press o key for exit... tu as une idée ?
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 11 mars 2008 à 15:48
Oui c'est bien ce que je pensais.
Donc tu ne passes rien en argument a ta fonction. Et s'il y a pas d'argument tu as mis exit_prog()!! (ton premier if)
Le plus simple est de code en dur ton chemin de ta video pour l'instant et voit si ca marche:
dayvid75014
Messages postés96Date d'inscriptionmercredi 5 mars 2008StatutMembreDernière intervention25 avril 2008 11 mars 2008 à 15:54
mais ce n'est pas ce que je veux faire!
mon problème est de venir récupérer les arguments sur la ligne de commande et d'ouvrir ce maudit fichier MPEG
Tus sais comment faire s'il te plait?
dayvid75014
Messages postés96Date d'inscriptionmercredi 5 mars 2008StatutMembreDernière intervention25 avril 2008 11 mars 2008 à 15:58
et voila toujours l'éternel problème, j'en peux plus :
"C:\Documents and Settings\dgombert\Bureau\Text1.cpp(48) : error C2440: '=' : cannot convert from 'int' to 'char [15]'
There are no conversions to array types, although there are conversions to references or pointers to arrays" a cause de la ligne :
ip_filepath = &argv[1][0]; //ip_filepath pointe sur le premier argument premier caractere
dayvid75014
Messages postés96Date d'inscriptionmercredi 5 mars 2008StatutMembreDernière intervention25 avril 2008 11 mars 2008 à 16:05
char ip_filepath[]="C:\Documents and Settings\dgombert\Bureau\DecodageMpeg\videotest.mpg"; ne marche pas non plus, la console s'affiche puis s'éteind sans rien afficher..
Pistol_Pete
Messages postés1053Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 11 mars 2008 à 16:09
Sinon voila une bonne occasion de ce servir de son debuggueur!!!
Tu mets des points d'arret un peu partout et tu regardes les valeurs de chaque variable. Et tu compares a ce que tu voudrais avoir.
Je pense que tu trouveras vite l'erreur comme ca.
dayvid75014
Messages postés96Date d'inscriptionmercredi 5 mars 2008StatutMembreDernière intervention25 avril 2008 11 mars 2008 à 16:53
Ok Vincent ! merci beaucoup, oui je suis en train d'essayer de me familiariser avec le débuggeur.. J'ai télécharger pour se faire "use of the debugger in visual C++".
Aucune chance que ça fonctionne dans un code C. En plus, en C non C99, on déclare ses variables en début de bloc de code.
for(i=0;i<50;i++) //juste les 50 premiers
printf("%c",Buffer[i]); //Tu affiches tes octets
On fais quoi si le fichier fait moins que 50 octets ?
En plus, on pourrait tout afficher avec un simple printf. Suffis de mettre un 0 où on veut arrêter.
dayvid75014
Messages postés96Date d'inscriptionmercredi 5 mars 2008StatutMembreDernière intervention25 avril 2008 12 mars 2008 à 09:41
Merci Vincent mais désolé de te dire que ça ne marche pas..
Les symptômes : la console s'éteind juste après que j'ai mis le chemin de la vidéo, aucun message d'erreur n'apparait. J'ai essayé un systeme("pause") juste après l'affichage des octets, sans succès..
Pas si simple que ça d'afficher les octets d'un fichier en fait... :s
PS : hier soir je n'avais plus internet, désolé...