Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1582 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C]Pb champ de bit/huffmann

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C]Pb champ de bit/huffmann

n°1304637
moulax
Posté le 13-02-2006 à 18:19:29  profilanswer
 

Bonjour, je suis en train de faire un mini projet ou l'on doit faire un pseudo code de huffmann(pour compresser un fichier)==>  
 
On doit lire le fichier txt en parametre, faire un tableau d'occurence des lettres trouvées, les classer par ordre d'apparition :
Mn fichier :
SALUUTTTT
 
tab:
 
T 4   U 2  S 1 ....
puis ensuite créer un code pour chaque lettre :
 
T= 1  U= 01 S= 001.....
le code crée est en fait un code ou on rajoute un zero a chaque lettre, le principe est que les lettres les plus présentes seront codé sur 1 bit alors que celles moins presentes seront codé sur plusieurs bits mais on s'en fout car elles sont pas tres presentes.
 
L'interet de ce programme est tt simplement de faire du C, car ce pseudo huffman sera efficace dans le seul cas ou on a bcp bcp d'occurences de quelques lettres et quelques occurence des autres.
 
Pour l'instant, j ai mon tab d'occurence en memoire, j ai un tableau trié a 2 dimensions contenant seulement des cases ou l'occurence est differenete de 0:
 
H       B             s
13      5             2 ................
 
Maintenant mon pb c'est pour encoder mon fichier avec mon nouveau code :
J'avais crée un fichier txt contenant mon code pour chaque lettre mais c'est galere a utiliser,  
la je cherche tout d'abord a generer mon code dans un tab en memoire, mais je trouve pas de solution pour concatenter un 0 a chaque fois??
Ensuite, il faut coder mon fichier en ecrivant des bits et non des octets bien entendu pour gagner de la place,  
Un ami m'a parlé des champs de bits ou je pourrai ecrire une voire plusieurs lettres dans une structure de bit, mais je ne vois pas comment gerer une lettre qui aurait pour code 0000000000000000000001 par ex.
De plus, avec quelle fonction ecrireriez vous une struct pareil(pour que tte la struct n'occupe qu'un octet!)
 
Merci d'avance. :(

Citation :


mood
Publicité
Posté le 13-02-2006 à 18:19:29  profilanswer
 

n°1304686
moulax
Posté le 13-02-2006 à 19:13:20  profilanswer
 

up ; )

n°1304759
moulax
Posté le 13-02-2006 à 21:24:43  profilanswer
 

personne??????

n°1304911
blackgodde​ss
vive le troll !
Posté le 14-02-2006 à 09:52:20  profilanswer
 
n°1304914
retrox
Posté le 14-02-2006 à 09:53:21  profilanswer
 

Pour gérer les champs de bits, il faut utiliser les opérateurs sur les bits ( >>, <<, &, |, ~)...
 
A toi de te faire ta petite lib de manipulation avec ces opérateurs de base pour rendre les choses plus simples.

n°1305108
moulax
Posté le 14-02-2006 à 13:03:55  profilanswer
 

thank you, j vai essayer tout ca,
 
en attendant, une question facile mais que je trouve pas:
 
J'ai le droit d'ecrire char c = 'A';  (lettre)
                    ou      char c= 65; (decimal)
                       ou   char c = 0x41 ou un truc comme ca  (hexa)
 
ca affiche pareil, mais pour ecrire mon char c en binaire je fais comment??? Pour lui donner une valeur mais en binaire (qui correspon a une lettre ds la table ascii bien sur)??
 
 
   

n°1305124
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-02-2006 à 13:31:35  profilanswer
 

moulax a écrit :

en attendant, une question facile mais que je trouve pas:
 
J'ai le droit d'ecrire char c = 'A';  (lettre)
                    ou      char c= 65; (decimal)
                       ou   char c = 0x41 ou un truc comme ca  (hexa)
 
ca affiche pareil, mais pour ecrire mon char c en binaire je fais comment??? Pour lui donner une valeur mais en binaire (qui correspon a une lettre ds la table ascii bien sur)??


Il n'y a pas de méthode standard[1], mais tu n'en a probablement pas besoin.
 
------------------------
[1] a part  

int x = strtoul ("01010101", NULL, 2);


mais je doute fort que tu ai besoin de ça...


Message édité par Emmanuel Delahaye le 14-02-2006 à 13:32:03

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1305376
moulax
Posté le 14-02-2006 à 16:18:53  profilanswer
 

ca peut toujours servir : ) merci

n°1305397
moulax
Posté le 14-02-2006 à 16:28:54  profilanswer
 

j'ai fait les test suivant:
 
char x = strtoul ("01000001", NULL, 2); //01000001 correspon au code de A dans la table ascii
printf("%d\n",x);  ==> 65
printf("%c\n",x); ==> A
printf("%d\n",sizeof(x)); ==> 1
 
donc apparemment je peux aussi convertir en char et en plus ma chaine ne fait qu'un octet apparemment!!
ca fait peu bizarre mais ca a l'air de fonctionner !qu'est ce que t'en pense??ya pas de risque à convertir en char??
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C]Pb champ de bit/huffmann

 

Sujets relatifs
un champ texte qui ne s'affiche pas ?????tester un champ vide
Javascript pour copier donnée dans un champ de form d'une autre framerequete+champ+count
récupérer un date via formulaire et l'insérer ds champ date [RESOLU][ASP3] request.form(champ) ne fonctionne pas
Comment spliter un champ importé de MySQL dans un tableau PHPchamp de texte dynamique et caractere gras
Valeur max d'un champ[AsP / JAVA / ...] créer un champ de texte formatable
Plus de sujets relatifs à : [C]Pb champ de bit/huffmann


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR