Debutant en c, probleme pour un programmme de compression

araborgne Messages postés 2 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 28 novembre 2003 - 28 nov. 2003 à 13:26
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 28 nov. 2003 à 17:38
voila donc je cherchais un programme permettant de compresser et decompresser un fichier texte, et image.
j'en ai trouver un, mais il est ecrit en c++, et je ne sait pas du tout le convertir en c tout court.
le voici donc, si quelqu'un pouvait m'aider ce serait simpa! :)
(un moyen de le traduire, ou un autre programme qui marche...)
merci d'avance!!

/*
Name : RLE
Author : Dauzat Lilian
Description : Compression / decompression suivant l'algorithme RLE
Date : 01/01/02
Copyright : Dauzat Lilian
Last update : 06/01/02
Email : obasileus@ifrance.com
*/

#include <stdio.h>

FILE *entre,*sortie;
unsigned char codeRepet=255,nbreRepet=1;
unsigned char AncCaract,caract,codeARepeter;

void compress(void);
void dcompress(void);

int main(int argc, char *argv[])
{
char option;
option = *argv[3];

entre = fopen(argv[1],"rb");
sortie = fopen(argv[2],"wb");

if (option == 'c') compress();
if (option == 'd') dcompress();

fclose(entre);
fclose(sortie);

return 0;
}

void compress(void)
{
fread(&AncCaract,sizeof(char),1,entre);

while (!feof(entre))
{
fread(&caract,sizeof(char),1,entre);

if (caract==AncCaract)
{
if (nbreRepet==253)
{
fwrite(&codeRepet,sizeof(char),1,sortie);
fwrite(&nbreRepet,sizeof(char),1,sortie);
fwrite(&AncCaract,sizeof(char),1,sortie);
nbreRepet = 1;
}
else nbreRepet++;
}

else
{
if (nbreRepet>3)
{
fwrite(&codeRepet,sizeof(char),1,sortie);
fwrite(&nbreRepet,sizeof(char),1,sortie);
fwrite(&AncCaract,sizeof(char),1,sortie);

}

else
{
for (short i=0 ; i!=nbreRepet ; i++)
{
fwrite(&AncCaract,sizeof(char),1,sortie);
}
}
nbreRepet = 1;
AncCaract = caract;
}
}
printf("Compression acheve");
}

void dcompress()
{
while (!feof(entre))
{
fread(&caract,sizeof(char),1,entre);

if (caract == codeRepet)
{
fread(&nbreRepet,sizeof(char),1,entre);
fread(&codeARepeter,sizeof(char),1,entre);

for (short i=0 ; i != nbreRepet ; i++)
{
fwrite(&codeARepeter,sizeof(char),1,sortie);
}
}
else
{
fwrite(&caract,sizeof(char),1,sortie);
}
}
printf("Decompression acheve");
}

4 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 nov. 2003 à 13:30
Ou est la partie specifique C++ qui pose probleme dans cet exemple RLE ?
BruNews, ciao...
0
cs_GoldenEye Messages postés 527 Date d'inscription vendredi 14 septembre 2001 Statut Membre Dernière intervention 6 octobre 2008 4
28 nov. 2003 à 13:37
Ou est le C++ ?
Optimiser, c'est bien, déboguer c'est mieux
0
araborgne Messages postés 2 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 28 novembre 2003
28 nov. 2003 à 17:30
et bien, le programme etait fourni avec en note qu'il etait ecrit en c++ 5.0, donc comme il ne marche pas je pensais que c'etait ca. lorsque je l'execute sur turbo borland dev-c++, il me marque une erreur, "general protection exception ... processor fault"
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 nov. 2003 à 17:38
en c++ 5.0 ne veut RIEN DIRE, plutot que serait fait sur VC++ 5 ok, compile pour du code 32 bits.
BruNews, ciao...
0
Rejoignez-nous