Forum Clubic

{Java} Lire 4 bits dans un octet (byte)

Dans mon programme, je dois lire 4 bits dans un flux d’octet (ByteBuffer).
Avec la méthode ByteBuffer.get(int) je me retrouve avec un byte (octet) mais seul les 4 derniers bits m’intéressent (il s’agit du champ Header Length de l’entête IP).
Ces 4 bits (big endian) représentent un simple entier mais je ne sais pas comment le récupérer.
Il doit bien y avoir des opérations bit-à-bit possibles non ?
Edité le 08/07/2008 à 14:10

Avec un masque bien positionné?

mybyte &= 0x0F

Bah écoute, ça m’a l’air parfait :slight_smile:
(Je testerais dans mon véritable programme demain au boulot)

Il faudrait vraiment que je me documente sur toute cette syntaxe “0x” et tout ces trucs subtils avec les types de données (non-signées déjà).

“0x” c’est pour annoncé que c’est de l’hexédecimal.

Et si j’avais voulu le faire en binaire, quelle aurait été la syntaxe ?

pour le binaire je ne sais pas.

les masque fonctionne aussi bien en héxa ou en décimale
dans le code que je t’ai donné, j’aurais pu faire
mybyte & = 15
15 en base 10 = F en base 16

le tout se traduit niveau binaire par
mybyte &= 00001111 //code en binaire
l’avantage de l’héxa est d’être concis dans le code, et c’est parce que j’ai toujours travaillé avec de l’héxa pour mes masques :smiley:

si mybyte vaut 45
le code se traduit de cette façon
00101101 (45)
&00001111 (15)
=_______
00001101 , soit en décimale 13

Après on peut imaginer des masques pour isoler n’importe quel bit, voire une fonction qui retourne le bit demandé
getBit( byte val , byte bit)…

bah l’hexa n’est qu’une forme de représentation du binaire… enfin, en simplifié.

Je ne bosse qu’avec des masques en binaire (plus facile à lire).

En tout cas la syntaxe était bonne (même s’il n’y avait pas de doutes là dessus) et je retrouve bien la bonne valeur de mon entête IP : Merci

de rien :wink: