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 :

Créer un BYTE à partir de 8 bits !!


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 145
    Par défaut Créer un BYTE à partir de 8 bits !!
    Salut à tous,

    Voila, j'ai un tableau de 7 int avec des données binaires (0 ou 1). Je souhaiterais créer une variable BYTE (unsigned char 0 <> 255) à partir de ces 8 bits ?

    merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Salut,

    Tu peut faire comme ca je pense:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    monResultByte = 0;
    for(i=0;i<8;i++)
    {
    if(tab[i]==1)
    monResultByte += 1<<i;
    }
    En fait tu fais un decalage a chaque fois que t'as 1 et rien si t'as 0, j'ai pas tester par contre.

  3. #3
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Une méthode un peu plus C++, testée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #include <iostream>
    #include <bitset>
    #include <string>
    #include <sstream>
    #include <vector>
     
    int main()
    {
    	std::vector<int> vecteur;
    	vecteur.push_back(1);
    	vecteur.push_back(0);
    	vecteur.push_back(0);
    	vecteur.push_back(1);
    	vecteur.push_back(1);
    	vecteur.push_back(0);
    	vecteur.push_back(1);
    	vecteur.push_back(0);
     
    	std::ostringstream oss;
    	std::copy(vecteur.begin(), vecteur.end(), std::ostream_iterator<int>(oss) );
     
    	std::bitset<8> octet (oss.str() );
    	unsigned char value = octet.to_ulong(); // 154
     
    	return 0;
    }
    Hope it helps !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 145
    Par défaut
    Ouah, eh bien, je viens de trouver en même tps une autre méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    int bin2dec(char *bin)
    {
    	int dec = 0;
    	while(*bin)
    	{
    		dec = (2 * dec) + (*bin - '0');
    		bin++;
    	}
    	return dec;
    } 
    	char binaire[7];
    	char str[10];
    	int decimal = 0;
    for(int i = 0; i<56; i++)
    	{
    		strcat(binaire,itoa(bit_cle[i],str,10));
    		if ( (i+1) % 8 == 0 )
    		{
    			decimal = bin2dec(binaire);
    			final.push_back((BYTE)decimal);
    			binaire[0] = '\0';	
    		}
    	}

  5. #5
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    LOL
    Tu n'as visiblement ici qu'une partie du code, car y'a plein de variables non déclarées !

    Ma solution tient en 4 lignes! et fonctionne...
    Enfin, tu fais ce que tu veux !

  6. #6
    Membre chevronné

    Inscrit en
    Août 2007
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 300
    Par défaut
    désolé mais... c'est une blague ou quoi??
    Le jeu c'est de trouver de pire en pire à chaque réponse, c'est ça?
    La réponse de Kacceda est propre, mais c'est vrai qu'on peut faire bien grave en forçant.
    Nouveau jeu concours:afficher un bool défini par 0 ou 1 sous forme "0" ou "1".
    Bon je commence:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    template<bool b, class X, class Y>
    struct if_ {
    typedef X type;
    };
    template<class X, class Y>
    struct if_<false,X,Y> {
    typedef Y type;
    };
    struct AfficheZero
    {
    AfficheZero ( void ) { cout << "0"; }
    };
    struct AfficheUn
    {
    AfficheUn( void ) { cout << "1"; }
    };
     
    bool t = 0;
    if_<t,AfficheZero,AfficheUn>::type Avirer;
    Je crois que ça marche... pas testé
    A votre tour!

    Edit: désolé fait un edit pour rire... pas prendre au sérieux, pas se vexer... Juste une réaction à chaud devant le délire direct parti pour l'orbite

  7. #7
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    La fonction de Kacceda est propre, je n'ai pas dit le contraire, elle prend juste en compte le fait que le tableau est un tableau C.
    J'ai juste écrit une autre possibilité en C++, c'est tout...

  8. #8
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    monResultByte = 0;
    for(i=0;i<8;i++)
    {
    if(tab[i]==1)
    monResultByte += 1<<i;
    }
    Au passage... le test prendra plus de temps que de traiter la valeur elle meme... donc autant faire ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    monResultByte = 0;
    for(i=0;i<8;i++)
    {
        monResultByte |= tab[i]<<i;
    }
    Bon, ok, je chippotte, pas taper

    Quand à l'autre solution "C++"... ouch !!

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 145
    Par défaut
    Merci à tous pour vos réponses. D'un coté vu que je suis un peu nul, je suis content d'avoir trouvé ma solution bourrin tt seul, même si les votres sont plus clean !!

    A bientot

  10. #10
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    poukill, à quoi sert ton vector ? Tu ne peux pas rentrer directement les valeurs dans le bitset ?

  11. #11
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par NiamorH Voir le message
    poukill, à quoi sert ton vector ? Tu ne peux pas rentrer directement les valeurs dans le bitset ?
    Ben l'énoncé précise qu'il dispose d'un tableau de int. Alors j'ai créé un vector<int>, pour faire plus C++ !

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 82
    Par défaut
    Il y a des jours où lorsque je vois les solutions proposées je me demande si je programme des applications depuis 25 ans ou si je l'ai rêvé ?

    La solution de 'ZeGlobox' est évidement la seule qui soit correcte, d'un point de vue pratique en tout cas, universitaire ? je ne sais pas.

    Néanmoins, en amont, pourquoi stocker des informations binaires dans un tableau d'entiers ? autant mettre les 8 informations directement dans l'entier final !

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

Discussions similaires

  1. Créer une image à partir d'un tableau de bytes
    Par rockley dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 21/12/2011, 13h59
  2. Comment créer un File à partir d'un byte[]
    Par hacksi dans le forum Langage
    Réponses: 8
    Dernier message: 07/03/2008, 16h26
  3. [C#] Créer un document à partir de mon prog
    Par matech dans le forum Windows Forms
    Réponses: 8
    Dernier message: 03/03/2005, 16h27
  4. Créer une video à partir d'images
    Par Akta3d dans le forum DirectX
    Réponses: 5
    Dernier message: 13/07/2004, 14h46
  5. Comment créer un bitmap à partir d'un panel ?
    Par calou34 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 19/08/2003, 15h06

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