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++
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 01/01/2013, 21h39   #1
walidzola
Invité de passage
 
Homme
Étudiant
Inscription : septembre 2012
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2012
Messages : 6
Points : 3
Points : 3
Par défaut Problème à l'écriture de l'arbre de huffman dans le fichier.

Bonsoir;
Je travaille sur un programme de compression de fichiers en cpp avec l'algorithme de Hufman.
Au moment où je dois écrire mon arbre dans le fichier, j'ai rencontré un problème. Le code binaire des caractères est tjrs à 0 . La fonction suivante m'affiche tjrs des 0 même en passant un caractère comme constante.

Code :
1
2
3
4
5
6
7
8
9
10
void afficherEnBinaire(char b){
    char c = b;
    for(int i = 0; i < 8; ++i){
        if(c & 128 != 0)
            cout<<1;
        else
            cout<<0;
        c <<= 1;
    }
}
Merci et bonne année.
walidzola est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 23h00   #2
backlash
Membre habitué
 
Inscription : mars 2010
Messages : 114
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 114
Points : 119
Points : 119
pour afficher en binaire :
Code :
1
2
3
4
5
6
void afficherEnBinaire(char b){
        for(int i = 0; i <= 7; ++i)
	{
		std::cout << (bool)(b & (1 << i)) << std::endl;
	}
}
backlash est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2013, 23h33   #3
Bousk
Modérateur
 
Homme Cyrille
Network programmer
Inscription : juin 2010
Messages : 1 546
Détails du profil
Informations personnelles :
Nom : Homme Cyrille
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Network programmer

Informations forums :
Inscription : juin 2010
Messages : 1 546
Points : 4 084
Points : 4 084
Bonsoir,

qu'espères-tu faire avec ce code ? Le comprends-tu ou l'as tu trouvé/copié d'internet ?

<< c'est un décallage à gauche, et &128 (0x80) prend le 8° bit
pourquoi utiliser une copie du paramètre b ?
Bousk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 10h43   #4
fregolo52
Expert Confirmé Sénior
 
Avatar de fregolo52
 
Homme
Développeur C
Inscription : août 2004
Messages : 2 077
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur C

Informations forums :
Inscription : août 2004
Messages : 2 077
Points : 4 023
Points : 4 023
Citation:
Envoyé par backlash Voir le message
pour afficher en binaire :
Code :
1
2
3
4
5
6
void afficherEnBinaire(char b){
        for(int i = 0; i <= 7; ++i)
	{
		std::cout << (bool)(b & (1 << i)) << std::endl;
	}
}
Es-tu sûre de ne pas écrire le nombre à l'envers ?
fregolo52 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 11h47   #5
walidzola
Invité de passage
 
Homme
Étudiant
Inscription : septembre 2012
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2012
Messages : 6
Points : 3
Points : 3
Citation:
Envoyé par Bousk Voir le message
Bonsoir,

qu'espères-tu faire avec ce code ? Le comprends-tu ou l'as tu trouvé/copié d'internet ?

<< c'est un décallage à gauche, et &128 (0x80) prend le 8° bit
pourquoi utiliser une copie du paramètre b ?
Bonjour;
Non, je l'ai pas trouvé sur internet. En fait je voulais écrire mon arbre de Huffman dans le fichier compressé, la fonction écrit bien les noeuds et les feuilles dans le fichier(1 pour les noeuds et 0 pour les feuilles), mais pour les caractères, elle écrit toujours des 0, c'est pourquoi j'ai écrit cette fonction d'affichage pour comprendre sa vient d'où le problème.
NB: La fonction qui écrit bit à bit fonction bien.
walidzola est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 13h54   #6
walidzola
Invité de passage
 
Homme
Étudiant
Inscription : septembre 2012
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2012
Messages : 6
Points : 3
Points : 3
Citation:
Envoyé par backlash Voir le message
pour afficher en binaire :
Code :
1
2
3
4
5
6
void afficherEnBinaire(char b){
        for(int i = 0; i <= 7; ++i)
	{
		std::cout << (bool)(b & (1 << i)) << std::endl;
	}
}
Merci ça marche pour l'affichage mais j'ai tjrs le problème à l'écriture de l'arbre. je vais essayer d'adapter la fonction qui écrit bit à bit dans le tampon à ton code.
walidzola est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h48.


 
 
 
 
Partenaires

Hébergement Web