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 :

inversion de bits (poid faible / poid fort)


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Points : 38
    Points
    38
    Par défaut inversion de bits (poid faible / poid fort)
    Bonjour,

    Je suis en train de réaliser une application qui permet d'envoyer sur un réseau des champs.
    Par contre le système qui doit recevoir les champs les attend avec les bits inversé par rapport à ce que j'ai enregistré.

    Je possède 2 variables, une avec la longueur de mon champ : l_lenght, l'autre avec la valeur du champ : l_value.

    Donc par exemple une valeur qui est 0011, je dois les inverser en 1100.
    Dans cet exemple, l_lenght vaut 4 et l_value vaut 3.

    Existe-t-il des méthodes qui le réalisent directement cette inversion de bits ?

    Merci pour votre aide

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Je ne connais pas de méthode toute faite. Cependant, tu peux soit les écrire à la main (avec de jolis masques et de jolis décalages de bits), soit utiliser boost.dynamic_bitset (mais c'est peut être utiliser un marteau pour écraser une mouche...) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    unsigned long flip_bits(unsigned long ul_val_)
    {
       const boost::dynamic_bitset<> ma_valeur(sizeof(unsigned long)*8,ul_val_);
       boost::dynamic_bitset<> retour(sizeof(unsigned long)*8,0);
       const boost::dynamic_bitset<>::size_type nbr_bits = ma_valeur.size();
       for(boost::dynamic_bitset<>::size_type index=0;index<nbr_bits;++index){
          retour[index] = ma_valeur[nbr_bits-index-1];
       }
       return retour.to_ulong();
    }

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Merci pour ta réponse,

    En effet je me suis orienté sur un système de décallage de bit et de masque.
    Ca fonctionne mais je me demandais si quelque chose ne savais pas le faire directement.

    Voici mon code si ça peut aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(int i=0; i < l_length; i++)
    {
    	l_value_out |= (l_value_in << (l_length-(i+1)) ) & (muint32)pow(2,l_length-(i+1));
    	l_value_in = l_value_in >> 1;
    }
    Bonne soirée

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

Discussions similaires

  1. tatouage d'image numerique (bit poid faible)
    Par 1google dans le forum Images
    Réponses: 0
    Dernier message: 10/03/2011, 14h51
  2. Watermarking fichier son (bits de poids faibles)
    Par lou013 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 04/01/2009, 17h37
  3. Recuperer LSB (le bit de poids faible) d'un entier ?
    Par MadCat34 dans le forum Général Python
    Réponses: 3
    Dernier message: 12/06/2007, 10h41
  4. Réponses: 6
    Dernier message: 23/08/2006, 16h50
  5. [debutant]bit de poid faible
    Par yonderboy dans le forum C
    Réponses: 2
    Dernier message: 27/12/2005, 21h55

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