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 :

Assigner des valeurs de bit dans un int


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 64
    Points
    64
    Par défaut Assigner des valeurs de bit dans un int
    Bonjour,

    Je cherche à stocker des valeurs de bit dans une donnée uint8_t.

    En entrée j’ai un tableau de bit, nommé et initialisé : uint8_t BIT[16], et je cherche à stocker chacune des valeurs de ces bits dans plusieurs données uint8_t Valeur.

    Exemple :
    @0 Valeur = BIT[0]
    @1 Valeur = BIT[1] ….

    Au départ j’avais pensé faire quelque chose comme ça :
    Valeur >> 0 = BIT[0] &1 (BIT[0] &1 car c’est seulement le premier bit que je veux mettre dans Valeur)
    Valeur >> 1 = BIT[1] &1

    Mais cela ne marche pas.

    Je vous remercie d’avance pour votre aide.

  2. #2
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Ton tableau BIT représente un type en big endian ? Si oui, commence à le lire par la fin pour ajouter les bits :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int i = sizeof(Valeur) - 1;
     
    for (; i >= 0; --i) {
        Valeur = Valeur << 1;
        Valeur |= BIT[i];
    }
    Dans l'autre sens si c'est un little endian. En somme rien de bien compliqué. Essaie juste de penser le plus logiquement possible.

  3. #3
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 64
    Points
    64
    Par défaut
    Merci pour ta réponse, je vais travailler sa.

    Je suis en little Indian, je vois quoi changer. Mais est-ce que j'ai besoin d'un masque pour affecter la valeur de BIT? Ou simplement en mettant = BIT[0], j'affect seulement le bit contenant la valeur?

  4. #4
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Tout à fait, essaie les 2 écritures pour voir la différence. Si tu veux, utilise cette fonction pour regarder le binaire de ta variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    template<class C>
    std::string convertToBinary(C &x)
    {
        int         size = sizeof(x) * 8 - 1;
        std::string ret;
     
        while (size >= 0)
        {
            ret += (char)(((x >> size) & 1) + '0');
            if (size-- % 8 == 0 && size >= 0)
                ret += ' ';
        }
        return ret;
    }
    Tu verras rapidement pourquoi il faut faire "|=" au lieu de "=". Et n'hésite pas à chercher sur google comment fonctionne les opérateurs binaires, un petit rappel ne fait jamais de mal.

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

Discussions similaires

  1. [WD19] Assigner des valeurs dans les Combos
    Par askior dans le forum WinDev
    Réponses: 13
    Dernier message: 05/05/2014, 14h43
  2. Assigner des valeurs à des float dans une structure
    Par Kai_Leng dans le forum Débuter
    Réponses: 18
    Dernier message: 03/01/2013, 23h12
  3. Assigner des valeurs dynamiques aux parametres dans X3 SAGE
    Par Chantalbd dans le forum Autres Solutions d'entreprise
    Réponses: 0
    Dernier message: 02/11/2012, 08h49
  4. Récupérer des valeurs de checkbox dans MySQL
    Par digger dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 05/09/2005, 14h58
  5. Réponses: 17
    Dernier message: 18/03/2005, 09h23

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