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 :

Affecter des bit d'un octet à un autre octet.


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 31
    Points : 21
    Points
    21
    Par défaut Affecter des bit d'un octet à un autre octet.
    Bonjour je veux savoir comment affecter des bit d'un octet à un autre. j'ai réaliser le code suivant mais il me donne une erreur "l'expression doit avoir une valeur modifiable" voilà l'exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    unsigned char* pCurrent;
    unsigned char* pBuffer;
    	for(int iInc = 0; iInc < usSize; iInc++)
    			{
    				*(pCurrent+iInc)&(1<<7)= *(pBuffer+iInc+2)&(1<<3);
    				*(pCurrent+iInc)&(1<<6)= *(pBuffer+iInc+2)&(1<<2);
    				*(pCurrent+iInc)&(1<<5)= *(pBuffer+iInc+2)&(1<<1);
    				*(pCurrent+iInc)&(1<<4)= *(pBuffer+iInc+2)&(1<<0);
    				*(pCurrent+iInc)&(1<<3)= *(pBuffer+iInc+3)&(1<<7);
    				*(pCurrent+iInc)&(1<<2)= *(pBuffer+iInc+3)&(1<<6);
    				*(pCurrent+iInc)&(1<<1)= *(pBuffer+iInc+3)&(1<<5);
    				*(pCurrent+iInc)&(1<<0)= *(pBuffer+iInc+3)&(1<<4);
     
    			}

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Si je ne me trompe pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pCurrent[iInc] = pBuffer[iInc+2] << 4 & 0xF0 | pBuffer[iInc+3] >> 4 & 0x0F;
    Le problème avec ton code est que les parties gauche : *(pCurrent+iInc)&(1<<i) créent des temporaires, auxquels tu ne peux donc pas assigner de valeur.
    Un peu comme : a + 1 = 2; : ce n'est pas la somme a + 1 que l'on veut modifier, mais a. Reste alors à trouver une expression qui ne mette que a à gauche : a = 2 - 1.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 31
    Points : 21
    Points
    21
    Par défaut Affecter des bit d'un octet à un autre octet.
    Merci Winjerome pour votre réponse, mais je pense que ça marche pour la première itération mais pour la deuxième non car le reste du pBuffer[incr+3]<<4 ca va etre rempli par des zero.

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Non, les valeurs aux indices iInc+2 et iInc+3 ne sont pas modifiées par l'expression.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 31
    Points : 21
    Points
    21
    Par défaut
    Vous avez raison les valeurs ne sont pas modifiés. j'ai une question est ce que un octet temporaire a été crée?

  6. #6
    Membre expérimenté

    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 545
    Points : 1 429
    Points
    1 429
    Par défaut
    Mettre à un '1' le bit n d'un mot :
    Mettre à un '0' le bit n d'un mot :
    Récupérer la valeur du bit n d'un mot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     b = (mot & (1<<n)) != 0;
    Recopier le bit m par la valeur bit n:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mot = (mot & (1<<n))? mot | (1<<m) : mot & ~(1<<m);
    Dans ton cas le plus simple serait de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     int msb,lsb
     for (bala)
         msb = (*(pointeur) & 0xF0)>>4;
         lsb = (*(pointeur) & 0x0F);
         *(pointeur) = (lsb<<4) |   msb;

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/03/2014, 09h04
  2. Réponses: 0
    Dernier message: 27/05/2010, 16h24
  3. Réponses: 2
    Dernier message: 17/05/2006, 21h35
  4. Travailler avec des bits
    Par Vulvulune dans le forum Langage
    Réponses: 5
    Dernier message: 02/03/2003, 19h09
  5. Question : ordre des bits ?
    Par Choupi dans le forum C
    Réponses: 3
    Dernier message: 11/02/2003, 06h22

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