Octet et Bit

Octet et Bit - C - Programmation

Marsh Posté le 14-07-2010 à 12:43:35    

Bonjour a tous !  
 
Une petite question pour un jour de glande nationale.  
 
Voila j ai un mot ( qui se trouve Fifo-->u8payload[3] ) de 8 bits , donc de 1 octet.
 
qui se lit comme ca:
bit      Description
0        Char size    
1        Char size 1                                                                                      
2        Char size 2                                                                                      
3        Stop bit                                                                                          
4        Paritiy mode
5        Parity mode 1
6        Flow control
7        Reserved.
 
 
Et j aurais aime lire les trois premiers bits pour avoir  mon char size, puis lire mon bit 3, lire mon bit 4 et 5 ensemble et enfin le bit 6.
 
Voici  le tableau du Char size par exemble
 
  | Value  |  Char size
      000          5-bit
      001          6-bit
      010          7-bit
      111          9-bit
 
 
Voila je vous remercie par avance :)

Reply

Marsh Posté le 14-07-2010 à 12:43:35   

Reply

Marsh Posté le 15-07-2010 à 09:26:05    

si ton mot est w,

Citation :

Et j aurais aime lire les trois premiers bits

c'est (w & 0x07) puisque 0x07 c'est le masque binaire 00000111

Citation :

puis lire mon bit 3

c'est ((w & 0x08)?1:0) ce qui peut aussi se faire comme ((w & 0x08)>>3)

Citation :

lire mon bit 4 et 5 ensemble

c'est ((w & 0x30)/0x10) ce qui peut aussi se faire comme ((w & 0x30)>>4)

Citation :

enfin le bit 6

c'est ((w & 0x40)?1:0) ce qui peut aussi se faire comme ((w & 0x40)>>6)
A+,

Message cité 1 fois
Message édité par gilou le 15-07-2010 à 09:32:30

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 15-07-2010 à 10:00:57    

Bonjour Gilou,  
 
Merci pour ta reponse en premier lieu !
 
J y ai pense hier soir, mais j avais plutot eu l idee de faire simplement comme ca
 
size[0=w&0x07;   //char size
size[1]=w&0x08;  // stop bits
size[2]=w&0x30;  // parity mode
size[3]=w&0x40;  // flow control
 
Mais je viens de me rendre compte que j avais faux, si je n utilise pas les "shift left" ?  
 
Merci encore une fois !


Message édité par ziedchen le 15-07-2010 à 10:02:52
Reply

Marsh Posté le 17-07-2010 à 21:58:14    

gilou a écrit :

c'est ((w & 0x30)/0x10) ce qui peut aussi se faire comme ((w & 0x30)>>4)


Rajoutons que le décalage est plus rapide que la division...

Message cité 1 fois
Message édité par Sve@r le 17-07-2010 à 21:58:30

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 17-07-2010 à 22:05:11    

Sve@r a écrit :

Rajoutons que le décalage est plus rapide que la division...


 
Mais que les compilateurs modernes savent transformer une division en décalage :)

Reply

Marsh Posté le 22-10-2010 à 17:46:06    

BMenez a écrit :


 
Mais que les compilateurs modernes savent transformer une division en décalage :)


 
À condition que le diviseur soit une puissance de 2 :o
 
moto-proof

Reply

Marsh Posté le 22-10-2010 à 18:20:50    

nonon , une division entiére ca suffira.
Dans le cas non puissance de 2 y a des algo pour.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed