[C]-Problème de compréhension d'une manipulation de bits
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

[C]-Problème de compréhension d'une manipulation de bits



  1. #1
    invite3c35244f

    [C]-Problème de compréhension d'une manipulation de bits


    ------

    Bonjour,

    j'utilise un soft pour gérer une communication modbus, et pour comprendre son fonctionnement, je fais du pas à pas, mais il y a un passage que je ne comprend pas.
    j'ai comme déclaration:
    Code:
    union transform{
    struct twoBytes{
    	unsigned char lowByte;
    	unsigned char highByte;
            }bytes;
    unsigned int integer;
    }T; 
    
    unsigned char buffer[74];
    et je ne comprend pas l'avant dernière ligne de ce morceau:
    Code:
    T.bytes.lowByte = buffer[3]; 
    T.bytes.highByte = buffer[2]; 
    T.integer*=2;
    buffer[2] = buffer[5]*2;
    Alors pour les lignes 1 et 2, buffer[3] = 0XF5 et buffer[1] = 0x01,
    donc T.bytes.lowByte = 0XF5 et T.bytes.highByte = 0x01 donc "integer" = 0x01F5, mais après, je ne vois pas du tout ce que ça fais le :
    Code:
    T.integer*=2;
    par contre "integer" = 0x03EA
    T.bytes.lowByte = 0XEA
    T.bytes.highByte = 0x03

    Quelqu'un peut m'expliquer ce que ça fait exactement??

    Si vous souhaiter plus d'info sur le soft, je peux vous transmettre le tout.

    Bonne fin de journée a tous

    -----

  2. #2
    sdec25

    Re : [C]-Problème de compréhension d'une manipulation de bits

    Bonjour.
    En C,
    Code:
    x *= y
    équivaut à
    Code:
    x = x*y
    Dans ton cas ça multiplie T par 2.
    Il existe, de la même manière les opérateurs +=, /= et -=

  3. #3
    invite3c35244f

    Thumbs down Re : [C]-Problème de compréhension d'une manipulation de bits

    Merci Sdec25,

    et pourquoi la valeur de
    T.bytes.lowByte et T.bytes.highByte change aussi?

    Merci encore...

  4. #4
    sdec25

    Re : [C]-Problème de compréhension d'une manipulation de bits

    Citation Envoyé par jorg1n Voir le message
    et pourquoi la valeur de
    T.bytes.lowByte et T.bytes.highByte change aussi?
    A cause de l'union. Une union est une structure dans laquelle tous les éléments sont au même emplacement mémoire.
    http://wiki.answers.com/Q/What_is_a_...the_C_language
    Code:
    union transform{
    struct twoBytes{
    	unsigned char lowByte;
    	unsigned char highByte;
            }bytes;
    unsigned int integer;
    }T;
    Dans ce cas-là, "integer" et la struct "twoBytes" désignent la même variable. integer est sur 2 octets (int) et lowByte et highByte sont chacun sur 1 octet.
    Donc lowByte = poids faible de integer, et highByte = poids fort de integer.

    Pour faire la même chose sans l'union on pourrait utiliser les pointeurs mais c'est moins élégant.
    char* lowByte = (char*) &integer;
    *lowByte désigne alors le poids faible de integer.
    A noter qu'on est en little endian (http://fr.wikipedia.org/wiki/Endianness). Donc poids faible en premier.
    Dernière modification par sdec25 ; 23/07/2009 à 18h09.

  5. A voir en vidéo sur Futura

Discussions similaires

  1. [C] - Manipulation des bits
    Par invite3c35244f dans le forum Électronique
    Réponses: 2
    Dernier message: 01/04/2009, 09h23
  2. Problème de compréhension d'un schéma
    Par invite7ca98d90 dans le forum Électronique
    Réponses: 2
    Dernier message: 03/02/2009, 17h10
  3. Manipulation de bits en langage C
    Par inviteddae56c8 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 08/11/2007, 17h59
  4. Problème de compréhension d'un graphique
    Par inviteee20e3bc dans le forum Biologie
    Réponses: 4
    Dernier message: 13/04/2007, 19h51
  5. Convertir 12 bits série en 7 bits paralléle avec un HC11 ?
    Par invite0ee134f7 dans le forum Électronique
    Réponses: 2
    Dernier message: 03/03/2005, 09h39
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...