Précédent   Forum du club des développeurs et IT Pro > C et C++ > C
C Forum d'entraide technique sur le langage C. Avant de poster -> F.A.Q. C, Avant de poster.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 07/01/2013, 00h33   #1
twity
Invité de passage
 
Inscription : juin 2008
Messages : 33
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 33
Points : 0
Points : 0
Par défaut Compression Algo Huffman

Bonsoir ,
je suis entrain de d’implémenter la compression d'un fichier texte à l'aide d'algo Huffman. après avoir construire l'arbre de huffman et dégager le code associé à chaque caractère c quoi l'étpe suivante ? et comment écrire en mémoire bit à bit?
twity est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 07h09   #2
Neckara
Rédacteur
 
Avatar de Neckara
 
Homme Denis
Étudiant
Inscription : décembre 2011
Messages : 2 545
Détails du profil
Informations personnelles :
Nom : Homme Denis
Localisation : France, Loire (Rhône Alpes)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2011
Messages : 2 545
Points : 6 818
Points : 6 818
Envoyer un message via MSN à Neckara Envoyer un message via Skype™ à Neckara
Bonjour,

On ne peut écrire en mémoire que octet par octet minimum.
Par contre tu peux utiliser des mask pour ne modifier qu'un bit :

Mettre un bit à 1 : variable |= 0x04.
Mettre un bit à 0 : variable &= 0xFE.
Tu as aussi des opérateurs de décalages de bits : 1 << 5 décale de 5 bits "vers la gauche", on obtient donc 32.
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon.

Chaîne Youtube : Vidéos

Ma page DVP : http://neckara.developpez.com/
Neckara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 14h07   #3
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 380
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 22 380
Points : 32 015
Points : 32 015
Envoyer un message via MSN à Médinoc
Ensuite, on cumule les opérateurs bit-à-bit avec les opérateurs de décalage:
Code C :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <limits.h>
 
void SetBit(unsigned char *tableau, size_t indexBit, int valeur)
{
	size_t indexByte = indexBit/CHAR_BIT, offsetBit=indexBit%CHAR_BIT;
	unsigned char valeurBit;
 
	/*Note: Je soustrais de CHAR_BIT pour indexer à partir du poids fort;
	ça rend mieux quand on affiche des bytes consécutifs en binaire.*/
	valeurBit = 1 << (CHAR_BIT - offsetBit -1);
 
	if(valeur)
		tableau[indexByte] |= valeurBit;
	else
		tableau[indexByte] &= ~valeurBit;
}
Après, pour écrire, il te suffit d'appeler SetBit() en incrémentant l'index à chaque fois.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h45.


 
 
 
 
Partenaires

Hébergement Web