{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: