bonjours,
je veux definir une structure dont l'un des elements est sur 3 bits et l'autre est sur 5 bits.
puis diviser un octet entre les deux elements.
merci
bonjours,
je veux definir une structure dont l'un des elements est sur 3 bits et l'autre est sur 5 bits.
puis diviser un octet entre les deux elements.
merci
Les structures n'existent PAS en java.
Pour extraire des morceaux de byte tu dois te débrouiller avec les opérateurs de décalage binaire (>> <<) et les opérateurs logiques (& | ^).
ce que je cherche c'est peut etre comme le c++
ça n'existe pas en java ça ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 unsigned char element1 : 4; unsigned char element2 : 4;
Non l'équivalent exact n'existe pas en java. Ce que tu peux faire c'est:
ou inversement:
Code : Sélectionner tout - Visualiser dans une fenêtre à part byte champs = (element1 << 4) | (element2 & 0xF)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 byte element1 = champs >> 4; byte element2 = champs & 0xF
bon je veux poser encore une autre question:
de point de vue memoire, si j'ai beaucoups de champs, le c++ me procure une gestion de structure memoire plus adéquoite, dans ce cas que le java???
si t'as beaucoup de champs à gérer avec 3 bits pour l'un, 5bits pour l'autre, etc. Tu stocke çà sur une série de int bruts et tu crée des méthodes pour accéders au bits dont tu as besoin. Exemple simple avec 2*4bits:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 public class MonType{ private byte data; private static final byte CHAMP1 = 0x0F; private static final byte CHAMP2 = 0xF0; public void setChamp1(byte champ1){ setChamp(champ1,CHAMP1); } public byte getChamp1(){ return getChamp(CHAMP1); } public void setChamp2(byte champ2){ setChamp(champ2,CHAMP2); } public byte getChamp2(){ return getChamp(CHAMP2); } public byte getChamp(byte champ){ return data & champ } public byte setChamp(byte champ, byte masque){ data = data & ! masque | data & masque; } }
Partager