Génére un tableau de caractére au format c contenant le byte code de n'importe quel fichier

Description

Ce programme génére un fichier texte contenant le code cpp de l'affectation des octets d'un fichier, à un tableau de caractére au format c.
suite a cela, il ne reste plus qu'a copier/coller le code dans un projet c/cpp, et a créer un nouveau fichier qui contiendra octet pour octet le contenu du tableau de caractére au format C, fraichement généré par le code suivant:

Source / Exemple :


#include <cstdlib>
#include <iostream>
#include <unistd.h> //write/close/
#include <fcntl.h> //open/2eme parametre de open sauf 'O_TEXT'/
#include <sys/stat.h> //3eme parametre de open/

using namespace std;

int main(int argc, char *argv[])
{
    int id, idt;
    char nomfichier[64];
    char nomsortie[64];
    char contenu[1000000];
    char temphex[32];
    //char nomvar[16];
    char tempimp[32];
    int taille;
    
    printf("Entrer le nom du fichier BINAIRE a convertir: ");
    scanf("%s",nomfichier);
    
    printf("Entrer le nom du fichier de SORTIE.txt: ");
    scanf("%s",nomsortie);
    sprintf(nomsortie, "%s.txt", nomsortie);
    /*
    printf("Entrer le nom de la variable contenant le byte code: ");
    scanf("%s",&nomvar);*/
    
    idt = open(nomsortie, O_BINARY|O_WRONLY|O_CREAT, S_IWRITE | S_IREAD);
    id  = open(nomfichier,O_BINARY|O_RDONLY);

    if(id!=-1){
        lseek(id, 0x00, SEEK_SET);
        taille = lseek(id, 0x00, SEEK_END);
        lseek(id, 0x00, SEEK_SET);
        if(taille == read(id, &contenu, taille)){printf("\nLecture ... OK\n\n");}else{printf("\nErreur anormale a la lecture...\n\n");/*Normalement faudrais stoper*/}
        write(idt, "{", 1);
        for(int i=0,h=0 ; i<taille ; i++,h++){

            if(h==16){printf("\n");h=0;}//pour la pagination
            
            for(int k=0;k<31;k++){temphex[k]='\0';tempimp[k]='\0';}
            
            sprintf(temphex,"%x",(unsigned char)contenu[i]);
            
            /*if(temphex[0]=='f'&&temphex[1]=='f'&&temphex[2]=='f'&&temphex[3]=='f'&&temphex[4]=='f'&&temphex[5]=='f'){
                sprintf(tempimp,",0x%c%c",temphex[6], temphex[7]);
            }else{*/
                if( temphex[1]!='0'&&temphex[1]!='1'&&temphex[1]!='2'&&temphex[1]!='3'&&temphex[1]!='4'&&temphex[1]!='5'&&
                temphex[1]!='6'&&temphex[1]!='7'&&temphex[1]!='8'&&temphex[1]!='9'&&temphex[1]!='a'&&temphex[1]!='b'&&
                temphex[1]!='c'&&temphex[1]!='d'&&temphex[1]!='e'&&temphex[1]!='f'
                ){ 
                    
                    sprintf(tempimp,",0x0%c",temphex[0]);
                }else{
                    
                    sprintf(tempimp,",0x%c%c",temphex[0], temphex[1]);
                }//fin du si l'octet vaut zero
            //}//fin du si y'a le beugue du ffffff
            
            printf("%s",tempimp);
            write(idt, tempimp, strlen(tempimp));
        }
        
        
        write(idt, "}", 1);
        
        sprintf(tempimp,"\n\nLongueur octal: %d",taille);
        write(idt, tempimp, strlen(tempimp));
        
        close(idt);
        close(id);
    }else{
        printf("\nErreur d'ouverture du fichier...\n\n");    
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}

Conclusion :


Pour conclure, ce code peu étre utile pour tout ce que chacun y trouvera d'utile. pour ma par il n'y a pas de débordement sans bytecode

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.