Bonsoir,

Envoyé par
rauch
Bonjours à tous.
Donc j'ai décalé dans une structure un
char flag;
donc un octect..
et j'aurais aimé savoir comment je fait pour identifier un bit sur cet octect
ex j'ai b7 b6 b5 b4 b3 b2 b1 b0
et j'aimerais que par exemple
b4 = halt
b5 = halt1
b6 = halt2
b7 = halt3
merci de m'aider svp
Voici une proposition :
supposons qu'on a :
flag = b7 b6 b5 b4 b3 b2 b1 b0;
vous declarez une autre variable de type char, par ex:
alors pour modifier n'importe quel bit, utilisez cette expression :
result=(~(taille_mask)<<offset)& flag) | ((value)<<offset)
exemple :
J'ai développé un petit code ( à vérifier) permettant de modifier le bit b0 du flag par 1 ( vous pouvez changer ces valeurs):
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 32 33 34 35 36 37 38 39 40
| #include <stdio.h>
/*La constante 1 représente le bit0*/
#define bit0 1
/*Prototype de la fonction bit_modif*/
unsigned char bit_modif(unsigned char value_in_bit_number,
unsigned char value_in,
unsigned char value_insert
);
/*Variable valeur de type unsigned char qui occupe un seule bit*/
typedef struct bit_s {
unsigned char valeur :1;
} bit_t;
int main ()
{
/*Variable à modifier*/
unsigned char flag = 0xCC;
/*numéro de bit de flag à modifier*/
bit_t bit;
/* Résultat de modification*/
unsigned char result;
bit.valeur=1;
/* Appel de la fonction bit_modif*/
result = bit_modif( bit0 , flag , bit.valeur);
return(0);
}
unsigned char bit_modif( unsigned char value_in_bit_number,
unsigned char value_in,
unsigned char value_insert
)
{
return ( (~((0x01) << value_in_bit_number) & value_in ) | ((value_insert) << value_in_bit_number ));
} |
Partager