Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    Inscrit en
    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?

  2. #2
    Expert Confirmé Sénior


    Homme Profil pro Denis
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    5 055
    Détails du profil
    Informations personnelles :
    Nom : Homme Denis
    Âge : 21
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : décembre 2011
    Messages : 5 055
    Points : 15 119
    Points
    15 119

    Par défaut

    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.

  3. #3
    Expert Confirmé Sénior Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    24 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

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

    Informations forums :
    Inscription : septembre 2005
    Messages : 24 272
    Points : 34 552
    Points
    34 552

    Par défaut

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •