2008-10-09 4 views
2

Je suis en train de convertir un int en trois bytes représentant int (big endian). Je suis sûr que cela a quelque chose à voir avec le bit-wise et le bit-shift. Mais je n'ai aucune idée de la façon de le faire.Comment puis-je transformer un int en trois octets en Java?

Par exemple:

int myInt; 

// some code 

byte b1, b2 , b3; // b1 is most significant, then b2 then b3. 

* Remarque, je suis conscient qu'un int est de 4 octets et les trois octets ont une chance de plus/underflowing.

Répondre

14

Pour obtenir octet le moins significatif:

b3 = myInt & 0xFF; 

Le 2ème octet le moins significatif:

b2 = (myInt >> 8) & 0xFF; 

Et le troisième moins significatif octet:

b1 = (myInt >> 16) & 0xFF; 

Explication:

Bitwise ANDing une valeur de 0xFF (11111111 en binaire) retourne les moins significatifs 8 bits (bits 0 à 7) dans cette nombre. Le décalage du nombre vers la droite 8 place les bits 8 à 15 dans les positions de bits 0 à 7 de sorte que ET avec 0xFF renvoie le second octet. De même, en déplaçant le nombre vers la droite 16 fois, les bits 16 à 23 sont placés dans les positions de bits 0 à 7, alors ANDing avec 0xFF renvoie le 3ème octet.

2

Un entier ne rentre pas dans 3 octets. Cependant, en supposant que vous connaissez ceux-ci en particulier font:

byte b1 = (myInt & 0xff); 
    myInt >>= 8; 
    byte b2 = (myInt & 0xff); 
    myInt >>= 8; 
    byte b3 = (myInt & 0xff); 
+0

Vous avez obtenu l'ordre le plus/moins importante inversée. – Darron

+0

Il n'est pas nécessaire de modifier myInt inutilement, comme indiqué dans les autres réponses. –

4
byte b1 = (myint >> 16) & 0xff; 
byte b2 = (myint >> 8) & 0xff; 
byte b3 = myint & 0xff; 

Je ne suis pas sûr comment cette holfds en java bien, j'Aam pas un dev java

+1

En fait, vous avez besoin d'une distribution explicite de int à octet, puis le '& 0xff' est inutile (et les octets sont signés, contrairement à C#). –

1

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

Questions connexes