Comment puis-je transformer un int en trois octets en Java?
-
06-07-2019 - |
Question
J'essaie de convertir un int
en trois octets
représentant ce int
(big endian).
Je suis sûr que cela a quelque chose à voir avec les changements de bits. Mais je ne sais pas comment faire.
Par exemple:
int myInt;
// some code
byte b1, b2 , b3; // b1 is most significant, then b2 then b3.
* Notez que je suis conscient qu'un int est de 4 octets et que les trois octets ont une chance de déborder / déborder.
La solution
Pour obtenir l'octet le moins significatif:
b3 = myInt & 0xFF;
Le deuxième octet le moins significatif:
b2 = (myInt >> 8) & 0xFF;
Et le 3ème octet le moins significatif:
b1 = (myInt >> 16) & 0xFF;
Explication:
ANDing au niveau du bit Une valeur avec 0xFF (11111111 en binaire) renvoie les 8 bits les moins significatifs (bits 0 à 7) de ce nombre. En décalant le numéro 8 à droite, les bits 8 à 15 sont placés dans les positions 0 à 7 de sorte que ANDing avec 0xFF renvoie le deuxième octet. De la même façon, décaler le numéro 16 fois à droite place les bits 16 à 23 dans les positions de bits 0 à 7; ainsi, ANDing avec 0xFF renvoie le troisième octet.
Autres conseils
byte b1 = (myint >> 16) & 0xff;
byte b2 = (myint >> 8) & 0xff;
byte b3 = myint & 0xff;
Je ne suis pas sûr de savoir comment cela se passe en Java, mais je ne suis pas un développeur Java
Un int ne rentre pas dans 3 octets. Cependant, à supposer que vous sachiez ce que ceux-ci font:
byte b1 = (myInt & 0xff);
myInt >>= 8;
byte b2 = (myInt & 0xff);
myInt >>= 8;
byte b3 = (myInt & 0xff);
En Java
int myInt = 1;
byte b1,b2,b3;
b3 = (byte)(myInt & 0xFF);
b2 = (byte)((myInt >> 8) & 0xFF);
b1 = (byte)((myInt >> 16) & 0xFF);
System.out.println(b1+" "+b2+" "+b3);
sorties 0 0 1