Je comprends pas trop la question. Mais globalement tu as juste à isoler le premier octet (si tu récupères un tableau d'octets bah tu prends juste le premier), et après tu lui applique des masques pour récupérer les informations que tu veux.
Genre (en supposant que data est un tableau d'octets):
- "data[0] & 0b1" te donnes la valeur du bit "présence destinataire".
- "(data[0] & (0b11 << 1)) >> 1" te donne la valeur des deux bits d'encodage, etc etc.
En gros & c'est l'opérateur & bit à bit, ça applique l'opérateur & sur chaque bit des deux opérandes et retourne le résultat.
L'opérateur << et >> sont de bit shift, ça décale tous les bits vers la gauche ou la droite du nombre indiqué.
Du coup tu utilises l'opérateur & pour appliquer un masque et isoler les bits qui t'intéresse, puis tu les décale le plus à droite (enfin là où les bits ont le poids le plus faible) pour qu'ils aient la valeur à laquelle tu t'attends. La partie décalage de bits est pas obligatoire mais plus facile pour raisonner sur ta valeur.
Après il y a un truc à savoir, c'est que certaines machines sont en little endian (octet de poids faible en premier) et d'autres en big endian (octet de poids fort en premier). En général quand tu envoies un nombre tu le convertis dans une endianness commune pour tout le monde (celle du network) puis quand tu le lis tu le reconvertis dans l'endianness de ta machine (host). En C il y a les fonction hton / ntoh (host to network / network to host). Mais c'est que nécessaire si tu manipules des nombres de plusieurs octets.
Message édité le 17 mai 2020 à 14:39:45 par lokilok