Editeur Hexadecimal

Résolu
dayvid75014 Messages postés 96 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 25 avril 2008 - 11 mars 2008 à 14:29
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 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(""); 
         }


 while ((argc > 1)
{
ip_filepath = &argv[1][2];
 }
  ++argv;
  --argc;
 }

printf("Opening MPEG-2 file %s, %d bytes.\n", ip_filepath, ip_file_length);
ip_file = fopen(ip_filepath, "rb");


......affichage....

}

23 réponses

Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
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

    printf("Opening MPEG-2 file %s, %i bytes.\n\n", ip_filepath, ip_file_length);

    char *Buffer=new char[ip_file_length];
   
    size=(int)fread(Buffer,1,ip_file_length,ip_file);         //On a tout le fichier recopier dans le Buffer
   
    if(size != ip_file_length)
    {
        printf("Erreur lecture\n" );
        exit(0);
    }
    fclose(ip_file);

   
    for(i=0;i<50;i++)                //juste les 50 premiers
        printf("%c",Buffer[i]);         //Tu affiches tes octets

    delete []Buffer;
}

A+
Mon site internet : http://pistol.petesampras.free.fr
3
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
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)

printf("Opening MPEG-2 file %s, %i bytes.\n", ip_filepath, ip_file_length);

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);

for(i=0;i<ip_file_length)
   printf("%c\t",Buffer[i]);         //Tu affiches tes octets

delete []Buffer;

}

A+
Mon site internet : http://pistol.petesampras.free.fr
0
dayvid75014 Messages postés 96 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 25 avril 2008
11 mars 2008 à 15:19
Bonjour,

Je viens d'arranger tout ça comme ça, mais ça ne marche pas, ça me renvoie dans la console, press a key to exit.. :s

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>        
#include <string.h>         // Bibliothèques utiles
#include
#include <fcntl.h>
#include <windows.h>
void exit_prog(char error_msg[]);
void press_key(char press_key_text[]);


FILE *ip_file=NULL;
char *ip_filepath=NULL;
long ip_file_length=0;


void exit_prog(char error_msg[])
{
 printf("\n%s\n", error_msg);          
 _fcloseall( );
 press_key("Press a key to exit...");
 exit(0);





void press_key(char press_key_text[])

 printf("%s", press_key_text);           
 while ( !_kbhit() )
 {;}
 _getch();
}


 


//=================================================


 




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)


 




printf("Opening MPEG-2 file %s, %i bytes.\n", ip_filepath, ip_file_length);


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


    delete []Buffer;
    return 0;


}}}
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
11 mars 2008 à 15:33
Comment lances tu ton exe?

Mon site internet : http://pistol.petesampras.free.fr
0

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

Posez votre question
dayvid75014 Messages postés 96 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 25 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 ?
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
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:

char ip_filepath[]="C:/Mavideo.mpg";
 
A+
Mon site internet : http://pistol.petesampras.free.fr
0
dayvid75014 Messages postés 96 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 25 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?
0
dayvid75014 Messages postés 96 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 25 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

meme avec atoi(&argv[1][0]); ça ne marche pas

QUELQU'UN SAIT-IL SVVVPPPPP ??????
0
dayvid75014 Messages postés 96 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 25 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..

36ème dessous...
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
11 mars 2008 à 16:06
"récupérer les arguments sur la ligne de commande "

Faut que tu passes par une invite de commande et ecrire quelque chose de la forme:

LeNOMdeMonEXE C:\MaVideo.mpg

Pour ta seconde erreur essaye cette ligne:   ip_filepath = argv[1][0]; 

A+
Mon site internet : http://pistol.petesampras.free.fr
0
dayvid75014 Messages postés 96 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 25 avril 2008
11 mars 2008 à 16:08
encore et toujours ..

C:\Documents and Settings\dgombert\Bureau\Text1.cpp(48) : error C2440: '=' : cannot convert from 'char' to 'char *'
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
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.

Mon site internet : http://pistol.petesampras.free.fr
0
dayvid75014 Messages postés 96 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 25 avril 2008
11 mars 2008 à 16:11
ok mais tu ne veux pas me regarder en mm temps que moi stp?
0
dayvid75014 Messages postés 96 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 25 avril 2008
11 mars 2008 à 16:14
stp jy arrive pas ... je sens que toi ça va te prendre une minute ...
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
11 mars 2008 à 16:46
Je peux pas compiler en ce moment, je verrai ca ce soir.
En attendant, essai de te familiariser avec le debuggueur.

A+
Mon site internet : http://pistol.petesampras.free.fr
0
dayvid75014 Messages postés 96 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 25 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++".

J'espère quand meme avoir de tes nouvelles.

Bonne après-midi.
Cordialement.
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
11 mars 2008 à 21:14
"Pour ta seconde erreur essaye cette ligne:   ip_filepath = argv[1][0]; "

ip_filepath est un pointeur non ?
Donc:
ip_filepath = argv[1];

C++ (@++)<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
12 mars 2008 à 00:30
strcpy(ip_filepath,&argv[1][0]);
L'art de se compliquer la vie ;)

char *Buffer=new char[ip_file_length];
delete []Buffer;

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.

C++ (@++)<!--
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
12 mars 2008 à 09:29
Autant pour moi, j'avais pas vu qu'il etait dans un forum C et non C++.
Toutes tes remarques sont judicieuses surtout l'histoire des 50 octects...

Ce n'est qu'un exemple, maintenant c'est a lui de l'adapter a ces besoins
A+
Mon site internet : http://pistol.petesampras.free.fr
0
dayvid75014 Messages postés 96 Date d'inscription mercredi 5 mars 2008 Statut Membre Dernière intervention 25 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é... 
0
Rejoignez-nous