begin process at 2012 05 28 23:04:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Algorithme

 > 

Compression, Split & Cryptage

 > 

convertion binaire en language C


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

convertion binaire en language C

samedi 2 janvier 2010 à 21:03:58 | convertion binaire en language C

mogador



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 le reconstruire en language C.



#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
dimanche 3 janvier 2010 à 09:10:01 | Re : convertion binaire en language C

rt15

Membre Club Administrateur CodeS-SourceS
Salut,

Voilà une piste de code :

Code C/C++ :
#include <stdio.h>
#include <stdlib.h>

void ToBin(char* lpOutput, char* lpInput, int nInputSize)
{
  int nInput;
  int nI, nJ;

  nJ = 0;
  for (nI = 0; nI < nInputSize; nI++)
  {
    nInput = lpInput[nI];
    lpOutput[nJ++] = (nInput & 0x80) ? '1' : '0';
    lpOutput[nJ++] = (nInput & 0x40) ? '1' : '0';
    lpOutput[nJ++] = (nInput & 0x20) ? '1' : '0';
    lpOutput[nJ++] = (nInput & 0x10) ? '1' : '0';
    lpOutput[nJ++] = (nInput & 0x08) ? '1' : '0';
    lpOutput[nJ++] = (nInput & 0x04) ? '1' : '0';
    lpOutput[nJ++] = (nInput & 0x02) ? '1' : '0';
    lpOutput[nJ++] = (nInput & 0x01) ? '1' : '0';
  }
}

FILE *SafeOpenFile(char *lpFileName, char *lpMode, FILE **lpFile)
{
  *lpFile = fopen(lpFileName, lpMode);

  if (! *lpFile)
    printf("Cannot open file: \"%s\"\n", lpFileName);

  return *lpFile;
}

long GetSizeOfFile(FILE* lpFile)
{
  long nCurrentPos;
  long nResult;

  nCurrentPos = ftell(lpFile);

  fseek(lpFile, 0, SEEK_END);
  nResult = ftell(lpFile);

  fseek(lpFile, nCurrentPos, SEEK_SET);

  return nResult;
}

char* LoadFile(FILE* lpFile)
{
  long nFileSize;
  char* lpResult;

  nFileSize = GetSizeOfFile(lpFile);

  lpResult = (char*)malloc(nFileSize);
  if (! lpResult)
    goto the_end;

  if (fread(lpResult, 1, nFileSize, lpFile) != nFileSize)
  {
    free(lpResult);
    lpResult = NULL;
  }

the_end:
  return lpResult;
}

int main()
{
  FILE* lpInputFile;
  FILE* lpOutputFile;
  char* lpInput;
  char* lpOutput;
  long nFileSize;
  int nResult;

  nResult = 1;

  if (! SafeOpenFile("input.txt", "rb", &lpInputFile))
    goto the_end;

  if (! SafeOpenFile("output.txt", "w+b", &lpOutputFile))
    goto the_end;

  lpInput = LoadFile(lpInputFile);
  if (! lpInput)
  {
    printf("Echec du chargement du fichier\n");
    goto the_end;
  }

  nFileSize = GetSizeOfFile(lpInputFile);
  lpOutput = (char*)malloc(nFileSize * 8);
  if (! lpOutput)
  {
    printf("Echec de l'allocation du buffer de sortie\n");
    goto free_input;
  }

  ToBin(lpOutput, lpInput, nFileSize);
  if (fwrite(lpOutput, 1, nFileSize * 8, lpOutputFile) != nFileSize * 8)
  {
    printf("Echec de l'écriture\n");
    goto free_output;
  }

  nResult = 0;
free_output:
  free(lpOutput);
free_input:
  free(lpInput);
the_end:
  return nResult;
}
dimanche 3 janvier 2010 à 13:37:52 | Re : convertion binaire en language C

mogador


Bonjour

c'est vraiment gentil de votre part, ca fonction 100% trés bien
comment je peu faire le contraire recupérer le fichier original

100000000000000000 merci et bonne année 2010

Sedik

dimanche 3 janvier 2010 à 13:49:39 | Re : convertion binaire en language C

rt15

Membre Club Administrateur CodeS-SourceS
Bin en partant de mon code, tu devrais arriver à non ?
lundi 4 janvier 2010 à 16:18:07 | Re : convertion binaire en language C

rt15

Membre Club Administrateur CodeS-SourceS
Attention, j'ai oublié les 2 fclose...
lundi 4 janvier 2010 à 19:08:03 | Re : convertion binaire en language C

mogador


Bonsoir,
j'arrive pas à faire le contraire pour reconstituer le ficheir original, je commence par ou

sed
lundi 4 janvier 2010 à 19:15:12 | Re : convertion binaire en language C

rt15

Membre Club Administrateur CodeS-SourceS
Par le début !

Commence par charger le fichier en mémoire avec LoadFile comme dans mon code ci-dessus. Tu vas te retrouver avec une grande chaîne de 0 et de 1.

Tu les parcours 8 par 8 et tu les convertis avec une opération sur les bits comme je l'ai fait dans ToBin.

Quelque chose comme ça :

Code C/C++ :
char nResult
nResult = 0;
if (lpBuffer[nI    ] == '1') nResult &= 0x80;
if (lpBuffer[nI + 1] == '1') nResult &= 0x40;


Cette discussion est classée dans : binaire, printf, char, sizeof, fp


Répondre à ce message

Sujets en rapport avec ce message

Probleme typedef struct [ par shenron ] #include #include #include /*Definition de la structure*/typedef struct{ char login[11]; char mdp[11];}strlogin;/*Declaration de fonctions*/void ajo Debutant : ecrire et lire un fichier txt [ par manu ] Bonjour a tous.Je debute, aussi desole.... :)Je cherche donc a ecrire dans un fichier txt, puis a lire ce fichier ligne a ligne, faire un split / expl PROBLEME POINTEURS [ par zeloveur ] char * saisirChaine(){ int i=0; char *chn; chn=(char *)malloc(sizeof(char)); do { chn[i]=getchar(); chn=(char *)realloc(chn,(++i+1)*sizeof(char)); } concatenation [ par asmv ] //a partir d'elements de tableau 'int' transformes en 'char'//essai de concatenation qui ne fonctionne pas pourquoi ?//merci pour votre aide#include # [debutant]attribution dun mot a une char et comparaison ... [ par DarkEbola ] en fait, jaurais aimé attribuer du texte a une charkke chose comme 500 ou 600 caracteres maximais jarrive pas a lui attribuer plus de 1 Charsuis-je pl taille chaine de char [ par langedechu ] Salut , voila mon prob (je sais plus comment faire) :j'ai une variable : const char *buffer; et j aimerais savoir le nombre de caractere stocker dans Problème d'effacement de tableau en C++ (sans MFC) [ par Shad0w ] Voilà, mon code copie le contenu d'un fichier dans une edit :------------- char fil[LEN]; OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(OPENFI regardez ma source HELP [ par asnow ] BonjourJe debute en C. j'ai voulu apprendre à enregistrer des données dans un fichier, ca a donné ce code .Si vous pouviez me donner des recommandatio Lecture de fichier binaire structuré [ par nico20000 ] Bonjour,j'ai besoin de lire dans un fichier binaire dont l'entête ressemble à ceci: (traduite en hexa)Properties gc90063 num FTPLocal le 17/11/2003Je


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,388 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales