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 :

convertir n bits d'un tableau en DWORD


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 56
    Points
    56
    Par défaut convertir n bits d'un tableau en DWORD
    Bonjour,

    J'ai un tableau de BYTE qui contient des données a extraire.
    Je cherche à remplir la fonction suivante qui me permet à partir d'un offset et d'une longueur donnés en bits a convertir en DWORD.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void CCardRecord::GetRecData(int nOffset, int nDataSize, DWORD& nValue)
    {	
    	DWORD dwTmp = 0;
     
    	//memcpy(&wTmp, &m_ByteArray[ nOffset ], nDataSize);
    	//nValue = wTmp;
    }

    Le tableau de byte est dans m_ByteArray.
    LA difficulte vient du fait que je veux avoir envie par exemple d'extraire de mon tableau 3 bits a partir du 13eme bits et de mettre cette valeur dans un DWORD.

    LA classe stl bitset pourrait elle me simplifier la vie ?

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Multipost interdit, voir forum C !
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par Trap D
    Multipost interdit, voir forum C !
    Peut etre mais j'aimerais comparer quelle est la facon la plus simple.
    Celle du C ou bien celle avec des bitsets.

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Extrait des règles du forum consultables ici
    Citation Envoyé par Règles du forum
    Postez dans le bon forum
    Lisez la liste de tous les forums pour bien choisir, postez votre message dans un seul forum (Le Multipost est interdit). Avant de poster, lisez la note en haut du forum expliquant les conditions d'utilisation du forum.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 47
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par romeo9423
    ui me permet à partir d'un offset et d'une longueur donnés en bits a convertir en DWORD
    Attention à ne pas confondre bits et bytes (octet), je ne vais pas répondre à ta question, mas ta fonction en commentaire ne fait pas de la copie de bits, mais de la copie d'octet

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par CroustRyu
    Citation Envoyé par romeo9423
    ui me permet à partir d'un offset et d'une longueur donnés en bits a convertir en DWORD
    Attention à ne pas confondre bits et bytes (octet), je ne vais pas répondre à ta question, mas ta fonction en commentaire ne fait pas de la copie de bits, mais de la copie d'octet
    Je sais c'est qu'avant je ne gerais que des octets et maintenant je dois rendre cette fonction plus flexible.

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 47
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par romeo9423
    LA classe stl bitset pourrait elle me simplifier la vie ?
    Personnellement je ne l'ai jamais utilisé, en général les operateurs sur les bits (<<, >>, &, |, ^, etc.) combiné avec des masks suffisent.

    Ensuite à toi de voir.

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Pas le temps de séparer / fusionner les sujets, je mets donc la réponse de Trap D du forum C en citation

    Citation Envoyé par Trap D
    Il faut utiliser les masques.
    Code:
    unsigned long src = m_ByteArray[ nOffset ]
    unsigned long buf = (src & 0x0000D000) >> 13;
    Ça doit être à peu près ça.
    Merci d'éviter le multipost à l'avenir.

    Peut etre mais j'aimerais comparer quelle est la facon la plus simple.
    Celle du C ou bien celle avec des bitsets.
    Pas la peine d'aller poster sur le forum C pour ça, on pourra te le dire ici

  9. #9
    Rédacteur
    Avatar de dvsoft
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2002
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2002
    Messages : 176
    Points : 622
    Points
    622
    Par défaut
    bonsoir,

    Utilisation des macro du C
    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
     
        #define BitSet(W,B)      (W |= (1<<B))
        #define BitClear(W,B)    (W &= ~(1<<B))
        #define BitTest(W,B)     ((W & (1<<B)) != 0)
    Utilisation:
       W = Mot
       B = Adresse du bit 0 à 31
     
       int PortB = 0xb800;
     
       //--- Set du bit 2
       BitSet(PortB,2);
     
       //--- Test du du bit 2
       if (BitTest(PortB,2)) {
            BtiClear(PortB,8);
       }// End IF
    ou alors avec des controls
    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
    27
    28
    29
    30
    31
     
    //---------------------------------------------------------------------------
    void __fastcall BitSet(int *Word, int Bit)
    {
        //--- Le bit doit etre >= 0 et inferieur au nombre de bit d'un int
        if ((Bit >= 0) && ( Bit < (sizeof(Word)*8)))
            *Word |= (1<<Bit);
    }
    //---------------------------------------------------------------------------
    void __fastcall BitClear(int *Word, int Bit)
    {
        //--- Le bit doit etre >= 0 et inferieur au nombre de bit d'un int
        if ((Bit >= 0) && ( Bit < (sizeof(Word)*8)))
            *Word &= ~(1<<Bit);
    }
    //---------------------------------------------------------------------------
    int __fastcall BitTest(int Word, int Bit)
    {
        //--- Le bit doit etre >= 0 et inferieur au nombre de bit d'un int
        if ((Bit >= 0) && ( Bit < (sizeof(Word)*8)))
            return ((Word & (1<<Bit)) != 0);
        return 0;
    }
     
    //--- Utilisation
     
         int iValue = 0x00;
         //--- Positionner le bit 4
         BitSet(&iValue,4);
     
         ......

    Bon Courage
    Alain

Discussions similaires

  1. Convertir facilement un entier en tableau de Bits
    Par toutounesan dans le forum VB.NET
    Réponses: 3
    Dernier message: 02/07/2011, 17h55
  2. Décaler les bits d'un tableau
    Par ludo894 dans le forum C
    Réponses: 3
    Dernier message: 30/11/2006, 16h50
  3. [MySQL] Convertir résultat requete en un tableau
    Par benjapar dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 31/07/2006, 18h42
  4. Convertir un caractere d'un tableau en int
    Par Battosaiii dans le forum C
    Réponses: 8
    Dernier message: 21/03/2006, 16h28
  5. comment convertir un fichier xml en tableau de string (java)
    Par l'indien dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 27/02/2006, 21h00

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