Pb - Concatenation de chaines de bits

TigreVert Messages postés 1 Date d'inscription jeudi 17 février 2005 Statut Membre Dernière intervention 17 février 2005 - 17 févr. 2005 à 17:06
mezaya Messages postés 202 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 6 mars 2010 - 18 févr. 2005 à 00:25
Bonjour,
Je dois realiser un projet de compression de huffman (je sais ya deja des exemples sur ce site).
Le pb du jour ... j'ai recupéré les codes de huffman de chaque caractere mais comment les reecrire bit a bit dans mon fichier compressé ?

(en resolvant ce pb je pense que j arriverai a ecrire bit a bit l entete)

Exemple :
Mon texte est 'aaaabbc'
Je recupère les codes de huffman :
a = 1
b = 01
c = 00

Je dois donc ecrire dans mon fichier '1111010100' bit a bit ...
J'arrive pas a comprendre comment utiliser un buffer qui me stockerai une chaine de 8 bits.

Le pb est donc ... comment ecrire les bits dans ce buffer ... et comment ne pas avoir de perte de données dans le cas ou le code de huffman serait sur plus de 8 bits (ou dans le cas ou je devrai ecrire par exemple deux codes de huffman codés sur 7 bits chacun par exemple)

Merci de votre aide

2 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
17 févr. 2005 à 18:14
Dans les sources que tu as trouvé il devrait y avoir une fonction permettant d'écrire une valeur sur un nombre de bits précis dans le fichier.

Si tu n'en a pas, regarde dans mes sources la compression LZW. Il ya ce genre de fonction.

L'idée est de sauvegarder dans une var globale les bits à envoyer tant que tu n'en as pas 8 (1 octet).
0
mezaya Messages postés 202 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 6 mars 2010
18 févr. 2005 à 00:25
la technique et de sotcker les bits à envoyer et dès que tu en as 8 tu
fabrique un octet que tu écrit dans ton fichier. Utilise les opérateurs
binaire <<, >>, | ,& pour transfomer tes 8
valeurs en 1 octet.

Voili,Voilou
0
Rejoignez-nous