IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Huffman et écriture dans fichier


Sujet :

C

  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2006
    Messages : 233
    Par défaut Huffman et écriture dans fichier
    J'ai un probleme lors de l'ecriture du fichier compressé par codage de Huffman!
    Comment écrire le dernier octet et surtout le décoder si on a un nombre non multiple de 8.

    Exemple:

    Soit avec la table de codage de Huffman, les bits à écrire!

    01010101 01110111 01100
    on pourrait écrire des '0' pour completer le dernier octet
    01010101 01110111 01100000
    Mais comment alors s'assurer que 000 ne correspond pas à un caractere dans table de codage?

    Merci d'avance!

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 131
    Par défaut
    Ca me rappelle des souvenirs de licence ou je devais code l algorithme de Huffman en java ^^.
    D apres mes souvenirs je ne m etais pas casse la tete j avais mis un dernier byte qui me donnait le nombre des bits de comblage.

  3. #3
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    Berg comment lors de la phase de décompression on retrouve ses petits c.a.d. que l'octet compressé n'était pas multiple de 8 ?
    Meme si on rajoute un flag à la fin ?

    Citation Envoyé par kuja2053
    01010101 01110111 01100
    on pourrait écrire des '0' pour completer le dernier octet
    01010101 01110111 01100000
    Et si on compléte avec les 0 devant et non à la fin ?
    00001100 c'est pareil que 01100

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 131
    Par défaut
    C est simple.
    Il suffit avoir plusieurs curseurs (2 ou 3 je ne sais plus)

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Nous avons la donnee codee suivante :
    101010110
    
    Nous rajoutons donc 7 bit a 0 ou a 1 (je vais prendre 0), ce qui donne :
    1010101100000000
    
    (10101011) = 171 en decimal
    (00000000) = 0 en decimal
    
    ce qui donnera en byte (171)(0)(7)
    7 etant le nombre de 0 ajoutés.
    Ensuite rien de plus simple, vous prenez 3 curseurs (et non 2 curseurs) qui lisent respectivement la 1ere lettre, la 2eme lettre et la 3eme lettre.
    Vous decodez le premier curseur et vous avancez les curseurs de 1 (le 1er curseur est sur le byte du 2eme curseur au tour precedent, etc ....).
    Une fois que le 3eme curseur (celui qui est le plus a droite) est a la fin du fichier, nous savons que le 2eme curseur est sur la valeur indiquant le nombre de bits de comblage se trouvant sur le curseur 1. Ici le byte du 2eme curseur est 7, donc le(s) bit(s) valide(s) dans le 1er curseur est 8-7= 1 bit.

    J espere avoir etait assez clair

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2006
    Messages : 233
    Par défaut suite
    merci tu as été clair !
    C'est un systeme tout simple et facile à faire.
    J'en profite pour une deuxieme question: moi je met les information pour l'arbre de huffman et les données dans un seul fichier,alors comment séparer entete et données du fichier compressé ?

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par kuja2053
    J'en profite pour une deuxieme question: moi je met les information pour l'arbre de huffman et les données dans un seul fichier,alors comment séparer entete et données du fichier compressé ?
    Il suffit de convenir de (ou d'indiquer) la taille du bloc d'en-tête (premiers bytes, par exemple). Codage 'réseau' recommandé (MSB en tête).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [0-1] : taille de l'en-tête
    [2] : début du bloc d'en-tête
    ...
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [0] : nombre d'éléments de l'en-tête
    [1] : taille d'un élément
    [2] : début du bloc d'en-tête
    ...
    C'est un problème de spécification d'interface, pas de langage C...

  7. #7
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2006
    Messages : 233
    Par défaut suite
    ok merci a tous!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Écriture dans fichier
    Par Nayila dans le forum Langage
    Réponses: 2
    Dernier message: 02/11/2008, 13h27
  2. [VS2005]lecture/écriture dans fichier binaire
    Par shadowmoon dans le forum Windows Forms
    Réponses: 10
    Dernier message: 25/09/2007, 17h30
  3. [Fichiers] écriture dans fichier
    Par kij dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 12/06/2007, 11h38
  4. Besoin d'aide écriture dans fichier
    Par boniface dans le forum Modules
    Réponses: 3
    Dernier message: 29/01/2007, 18h06
  5. Réponses: 2
    Dernier message: 15/11/2005, 09h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo