VB/VB.Net Protocol d2

A

Anonymous

Invité
#1
--------------------------------------------------------
[HEADER:[HI-HEADER:2 bytes (PacketId 6 bits + LengthType 2 bits)][LENGTH:LengthType (1/2/3) bytes]][MESSAGE:LENGTH bytes]

Le header donne des infos sur le paquet :
- l'id du paquet (qui permet de déterminer de quel paquet il s'agit)
- sur combien d'octets la taille est encodée (le type de taille)
- sa taille (la taille du contenu, header exclu)

L'id du paquet et l'information sur le nombre d'octets sur lesquels la taille est encodée, sont encodés sur 2 octets confondus. Je les ai nommés Hi-Header (pour header de tête)
C'est-à-dire que l'id est en vérité encodée sur 8+6 bits (1 octet + 3 quarts) et le type de taille sur 2 bits (il peut donc contenir le nombre 0, 1, 2 ou 3)
Cela permet sans doute de raccourcir un peu la taille du header.

Il faut donc lire un short (2 octets) et séparer les 2 premiers bits du nombre. Pour cela nous faisons un décalage de 2 bits vers la droite (noté >>) (ce qui supprime les bits) pour obtenir l'id du paquet, et appliqué un "mask" (masque --") en utilisant l'opérateur AND sur les 2 premiers bits pour avoir 2 bits seulement.

En détail voici la démarche
J'ai un paquet d'id 2 (en binaire 10) et avec un type de taille 1 (01) également
Je vais avoir donc (en bits) 0000 0000 0000 1001
Ce qui correspond au chiffre 5 (mais on s'en fiche)

En appliquant l'opérateur >> 2 on obtiendra 0000 0000 0000 0010 -> soit 2 (notre id)
En appliquant l'opérateur & (AND) avec le chiffre 3 ( soit & 3) on obtiendra 0000 0000 0000 0001

En faite 3 correspond à 0111, l'opérateur AND garde que les bits lorsqu’ils valent tous les deux 1 et non 0.
Exemple 2 & 3 <=> 0010 & 0011 => 0010 (soit 2)
Ou plus utile 7 & 3 <=> 1110 & 0011 => 0010 (soit 2)
Donc AND permet de tronquer en quelque sorte le nombre et ignorer des bits.
--------------------------------------------------------------------------------------
Je comprend pas "C'est-à-dire que l'id est en vérité encodée sur 8+6 bits (1 octet + 3 quarts) et le type de taille sur 2 bits (il peut donc contenir le nombre 0, 1, 2 ou 3)"
comment a t'il 8+6 bits ? dans un octet on a 8bits non ? enfin si quelqu'un peut m'expliquer et je pense si vous m'aidez a comprendre sa que je vais avoir un probleme de compréhension avec AND x)
 

ToOnS

Membre Actif
Inscrit
8 Avril 2009
Messages
974
Reactions
0
#3
Salut , ah en fait non
comment a t-il 8+6 bits ? -> c'est ecrit 2 lignes en dessous de ce que tu cites : "C'est-à-dire que l'id est en vérité encodée sur 8+6 bits (1 octet + 3 quarts) et le type de taille sur 2 bits (il peut donc contenir le nombre 0, 1, 2 ou 3)"
oui dans un octet on a 8 bit , et dans un short (2 octets) ?
pour AND : http://fr.wikipedia.org/wiki/Fonction_ET , jolie table de verité
 
Haut Bas