CRYPTAGE/COMPACTAGE HUFFMAN (VC++ 5.0)

Jo - 6 déc. 2001 à 23:18
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 - 7 août 2006 à 13:47
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/9364-cryptage-compactage-huffman-vc-5-0

cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
7 août 2006 à 13:47
Dans CompactHuffman :
Estime_Taille retourne la taille des donnees sorties en bits
et non en octets, donc tu alloues trop de memoire
(Buf = LocalAlloc(...)) et surtout pTaille n'est pas homogene :
en entree : nombre d'octets
en sortie : nombre de bits

donc il faut faire return "(dwTaille+7)/8 ;"
au lieu de "return dwTaille;" dans la fonction Estime_Taille
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
4 août 2006 à 22:42
un BUG : dans ta structure noeud, il faut mettre "unsigned char caractere;" et non "char caractere;"
car tu fais un moment Tbl[Arbre[dwIndex].caractere]
or si le caractere est pas exemple 0xFF, alors tu ne feras pas [255] mais plutot [-1], ce qui est assez genant ...
ptidiable009 Messages postés 2 Date d'inscription dimanche 28 mai 2006 Statut Membre Dernière intervention 28 mai 2006
29 mai 2006 à 11:29
je sais vrément^pas comment vous puvez ce genre d'etudes je trouve ke c innintérésent allez dormir!!!!!
Croqmort Messages postés 95 Date d'inscription mercredi 5 décembre 2001 Statut Membre Dernière intervention 27 juin 2006
5 août 2004 à 02:18
je connais pas bien l'utilisation de VC++ en mode reel, je savait meme pas qu'il pouvait le faire, j'ai toujours utiliser BC++ pour ce genre de chose.
il me semble que il n'est pas indispensable de creer une bibliotheque pour loger ce bout de code.
un couple .c .h separer de ton code principal et bien portable est la solution que j'utilise le plus souvent, comme ça je peut egalement facilement le porter sous d'autres systeme (meme si dans ce cas precis ça servirai a rien ;)).
donc je ne peut pas t'aider pour la creation d'une DLL 16bits, ni pour la creation de .lib car je n'en n'ai jamais fait.
par contre je peux te conseiller de faire un fichier genre graph.c dans lequel tu met ton code, et un fichier graph.h dans lequel tu exporte ce dont tu a besoin. c'est bien plus facile que de creer une librairie.
si tu veux il me semble que j'ai coder qqchose de similaire il y'as bien longtemp, je peux te l'envoyer. faut juste que je cherche sur mon disque ;) et il me semble que c'etait en C++ et non en C.

voila desolé de pas pouvoir apporter plus de renseignement.
louatiamin Messages postés 20 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 5 avril 2005
24 juil. 2004 à 18:47
pour ceux ki ne connaisse pas TC++ 3.0(sous dos) et ne connaisse rien sur les librairie statique ou bien le mode real 16bits c est vraiment unitile d'essayer de repondre mais en tt cas lire pour pour s'enrichir
si aussi vous vous ennuyer trop vite liser cet article sur le forum
help necessite un CRACK En C++ et DLL
Forum : C & C++

cet article est une version plus detaillé et plus longue
c'est vraiment interessant{a mon avis}
le code suivant par exemple
#include"stdio.h"
//pointe sur l'adresse de l'ecran en memoire
char *Ecran=(char*)(0xa0000000);	//variable globale Ecran

/* les modes standards sont
0Dh	320x200	16
0Eh	640x200	16
0Fh	640x350	2
10h	640x350	16
11h	640x480	2
12h	640x480	16
13h	320x200	256
03h mode normal
*/
void activeVGA(unsigned char mode)
{

_asm{
mov ax,0;
mov al,mode;
int 10h
}
}
void desactiveVGA(void)
{
_asm{
mov al,0x03;
int 10h
}
return;
}
void setMode(unsigned char mode)
{
_asm{
mov al,mode;
int 10h
}
return;
}
void clearScreen(unsigned char color,unsigned char mode)
{
void setPixel(int x,int y,unsigned char color,unsigned char mode);
for(int i=0;i<320;i++)
for(int j=0;j<200;j++)
setPixel(i,j,color,mode);
}



/* les modes standards sont
0Dh	320x200	16
0Eh	640x200	16
0Fh	640x350	2
10h	640x350	16
11h	640x480	2
12h	640x480	16
13h	320x200	256
03h mode normal
*/

void setPixel(int x,int y,unsigned char color,unsigned char mode)
{   // int parceke depasse les 255
// x<X_max ordonn?
// y<Y_max abcisse
int X_max,Y_max;
switch(mode)
{
case 0x0d:X_max=320;Y_max=200;break;
case 0x0e:X_max=640;Y_max=200;break;
case 0x0f:X_max=640;Y_max=350;break;
case 0x10:X_max=640;Y_max=350;break;
case 0x11:X_max=640;Y_max=480;break;
case 0x12:X_max=640;Y_max=480;break;
case 0x13:X_max=320;Y_max=200;break;
}
Y_max=Y_max+1-1;
Ecran[x+X_max*y]=color;
}


#ifndef getPal
#include"conio.h"

//Red green blue
struct RGB
{
unsigned char r;
unsigned char g;
unsigned char b;
};



/*	
DAC:
D		A	   C
Digital Analog Converter

PORT	Nom de registre
03C8h	Pel Write Address
03C7h	Pel Read Address
03C5h	DAC state
03C9h	Pel data
03C6h	Pel Mask
*/
//lecture de la palette  DAC
RGB getPal(unsigned char col)
{
  	RGB Color;
//int _outp( unsigned short port, int databyte );

//envoi d'une commande de lecture
outp (0x03C7,col);

//etape de lecture
Color.r = inp (0x03C9);	//inport
Color.g = inp (0x03C9);
Color.b = inp (0x03C9);
return Color;
}
void getPal(unsigned char col,unsigned char &r,unsigned char &g,unsigned char &b)
{
  outp (0x03C7, col);
  r = inp (0x03C9);
  g = inp (0x03C9);
  b = inp (0x03C9);
}

#endif

#ifndef setPal
#include"conio.h"
void setPal(unsigned char col,RGB Color)
{
  	//int _outp( unsigned short port, int databyte );

//envoi d'une commande de ecriture
outp (0x03C8,col);

//etape de lecture
outp (0x03C9,Color.r);
outp (0x03C9,Color.g);
outp (0x03C9,Color.b);
}
void setPal(unsigned char col,unsigned char r,unsigned char g,unsigned char b)
{
outp (0x03C8,col);
outp (0x03C9,r);
outp (0x03C9,g);
outp (0x03C9,b);
}
#endif

fait partie d'une bibliotheque ke j'ai développé sous TC++3.0
exactement se demander pourkoi Tc++ non pas VC++ ou autre
la reponse sera alors tres simple
pour la compilation avec VC++ peut etre y'aura pas de errors mais s'il y en a c 'est trop simple a corriger
car avec Tc++ le type int occupe 2 octet alors k' avec VC++ sera de 4 octets {le probleme se posera unikement pour les instruction d'assembleur imbriké}
mais en general on peut dire ke dans le cas ou on utilise des char il y'aura pas des erreurs pour les deux compilateur mais le probleme se pose est celui de la memoire protegé en mode 32bits { c a d VC++ sous windows) alors ke le linkage(avec VC++) se fait parfait Alors dés la premiere execution d'une instruction de type interruption ----> hoooop le programme plante
alors la solution est le mode réal
et du fait k'en mode real il y'a la contrainte sur la memoire accessible est de 10 segment de 64k et k'on ne peut acceder k'a un seul block en meme temp j'ai pensé a elaborer une librairie statique (*.lib) c'est a dire du code compilé pret a utiliser et ensuite appeler les fonction ke j'ai construit a partir de VC++{RQ: je sais bien manipuler une création et utilisation des (*lib) sous les deux environnement si vous vouler de l'aide demander le prochainement}
alors vous vous demander ou est le probleme
je vous repond::
une librairie ke j'ai crée avec TC++ n'est pas reconnu pour VC++ alors au moment du linkage sous VC++ on me signale ke le fichier de la librairie est corrompu alors ke en réalité je peut utilser cette meme librarie sous TC++
veut dire ke peut etre il 'ya incompatibilité des deux type de librarire{veut dire ke si une lib est créé avec VC++ elle ne sera compri k'avec VC++
et celle de TC++ ne sera aussi ke pour Tc++}
une autre solution ki me venai en tete est de créer une DLL mais il me parai k'en mode real 16bits il 'ya pas de facon a faire
BON ce ke je demande est y'a til façon a créer une DLL a partir de TC++ et sera reconnu en tant ke DLL pour tt les autre compilateur
peut etere j'ai kelke autres chose a dire pour clarifier al situation mais je sent ke ça devient trop ennuyeux
En tt cas j'attend vos reponses
aussi contacter moi par mail louatiamin@yahoo.fr



si vous avez une Reponse a mon sujet
répondez moi et MERCI Infinément
louatiamin Messages postés 20 Date d'inscription jeudi 22 juillet 2004 Statut Membre Dernière intervention 5 avril 2005
24 juil. 2004 à 18:46
pour ceux ki ne connaisse pas TC++ 3.0(sous dos) et ne connaisse rien sur les librairie statique ou bien le mode real 16bits c est vraiment unitile d'essayer de repondre mais en tt cas lire pour pour s'enrichir
si aussi vous vous ennuyer trop vite liser cet article sur le forum
help necessite un CRACK En C++ et DLL
Forum : C & C++

cet article est une version plus detaillé et plus longue
c'est vraiment interessant{a mon avis}
le code suivant par exemple
#include"stdio.h"
//pointe sur l'adresse de l'ecran en memoire
char *Ecran=(char*)(0xa0000000);	//variable globale Ecran

/* les modes standards sont
0Dh	320x200	16
0Eh	640x200	16
0Fh	640x350	2
10h	640x350	16
11h	640x480	2
12h	640x480	16
13h	320x200	256
03h mode normal
*/
void activeVGA(unsigned char mode)
{

_asm{
mov ax,0;
mov al,mode;
int 10h
}
}
void desactiveVGA(void)
{
_asm{
mov al,0x03;
int 10h
}
return;
}
void setMode(unsigned char mode)
{
_asm{
mov al,mode;
int 10h
}
return;
}
void clearScreen(unsigned char color,unsigned char mode)
{
void setPixel(int x,int y,unsigned char color,unsigned char mode);
for(int i=0;i<320;i++)
for(int j=0;j<200;j++)
setPixel(i,j,color,mode);
}



/* les modes standards sont
0Dh	320x200	16
0Eh	640x200	16
0Fh	640x350	2
10h	640x350	16
11h	640x480	2
12h	640x480	16
13h	320x200	256
03h mode normal
*/

void setPixel(int x,int y,unsigned char color,unsigned char mode)
{   // int parceke depasse les 255
// x<X_max ordonn?
// y<Y_max abcisse
int X_max,Y_max;
switch(mode)
{
case 0x0d:X_max=320;Y_max=200;break;
case 0x0e:X_max=640;Y_max=200;break;
case 0x0f:X_max=640;Y_max=350;break;
case 0x10:X_max=640;Y_max=350;break;
case 0x11:X_max=640;Y_max=480;break;
case 0x12:X_max=640;Y_max=480;break;
case 0x13:X_max=320;Y_max=200;break;
}
Y_max=Y_max+1-1;
Ecran[x+X_max*y]=color;
}


#ifndef getPal
#include"conio.h"

//Red green blue
struct RGB
{
unsigned char r;
unsigned char g;
unsigned char b;
};



/*	
DAC:
D		A	   C
Digital Analog Converter

PORT	Nom de registre
03C8h	Pel Write Address
03C7h	Pel Read Address
03C5h	DAC state
03C9h	Pel data
03C6h	Pel Mask
*/
//lecture de la palette  DAC
RGB getPal(unsigned char col)
{
  	RGB Color;
//int _outp( unsigned short port, int databyte );

//envoi d'une commande de lecture
outp (0x03C7,col);

//etape de lecture
Color.r = inp (0x03C9);	//inport
Color.g = inp (0x03C9);
Color.b = inp (0x03C9);
return Color;
}
void getPal(unsigned char col,unsigned char &r,unsigned char &g,unsigned char &b)
{
  outp (0x03C7, col);
  r = inp (0x03C9);
  g = inp (0x03C9);
  b = inp (0x03C9);
}

#endif

#ifndef setPal
#include"conio.h"
void setPal(unsigned char col,RGB Color)
{
  	//int _outp( unsigned short port, int databyte );

//envoi d'une commande de ecriture
outp (0x03C8,col);

//etape de lecture
outp (0x03C9,Color.r);
outp (0x03C9,Color.g);
outp (0x03C9,Color.b);
}
void setPal(unsigned char col,unsigned char r,unsigned char g,unsigned char b)
{
outp (0x03C8,col);
outp (0x03C9,r);
outp (0x03C9,g);
outp (0x03C9,b);
}
#endif

fait partie d'une bibliotheque ke j'ai développé sous TC++3.0
exactement se demander pourkoi Tc++ non pas VC++ ou autre
la reponse sera alors tres simple
pour la compilation avec VC++ peut etre y'aura pas de errors mais s'il y en a c 'est trop simple a corriger
car avec Tc++ le type int occupe 2 octet alors k' avec VC++ sera de 4 octets {le probleme se posera unikement pour les instruction d'assembleur imbriké}
mais en general on peut dire ke dans le cas ou on utilise des char il y'aura pas des erreurs pour les deux compilateur mais le probleme se pose est celui de la memoire protegé en mode 32bits { c a d VC++ sous windows) alors ke le linkage(avec VC++) se fait parfait Alors dés la premiere execution d'une instruction de type interruption ----> hoooop le programme plante
alors la solution est le mode réal
et du fait k'en mode real il y'a la contrainte sur la memoire accessible est de 10 segment de 64k et k'on ne peut acceder k'a un seul block en meme temp j'ai pensé a elaborer une librairie statique (*.lib) c'est a dire du code compilé pret a utiliser et ensuite appeler les fonction ke j'ai construit a partir de VC++{RQ: je sais bien manipuler une création et utilisation des (*lib) sous les deux environnement si vous vouler de l'aide demander le prochainement}
alors vous vous demander ou est le probleme
je vous repond::
une librairie ke j'ai crée avec TC++ n'est pas reconnu pour VC++ alors au moment du linkage sous VC++ on me signale ke le fichier de la librairie est corrompu alors ke en réalité je peut utilser cette meme librarie sous TC++
veut dire ke peut etre il 'ya incompatibilité des deux type de librarire{veut dire ke si une lib est créé avec VC++ elle ne sera compri k'avec VC++
et celle de TC++ ne sera aussi ke pour Tc++}
une autre solution ki me venai en tete est de créer une DLL mais il me parai k'en mode real 16bits il 'ya pas de facon a faire
BON ce ke je demande est y'a til façon a créer une DLL a partir de TC++ et sera reconnu en tant ke DLL pour tt les autre compilateur
peut etere j'ai kelke autres chose a dire pour clarifier al situation mais je sent ke ça devient trop ennuyeux
En tt cas j'attend vos reponses
aussi contacter moi par mail louatiamin@yahoo.fr



si vous avez une Reponse a mon sujet
répondez moi et MERCI Infinément
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
25 mai 2002 à 23:59
On dit UN source coco :)
une source c'est l'endroit d'où provient une info ou bien d'où jaillit de l'eau :)
Et puis, c'est pas la peine de gueuler, PEACE!

salut

Kirua
LE COMPILATEUR DANS LE TITRE DE LA SOURCE !!!!
Rejoignez-nous