¿Cómo puedo convertir un int en tres bytes en Java?
-
06-07-2019 - |
Pregunta
Estoy tratando de convertir un int
en tres bytes
que representan ese int
(big endian).
Estoy seguro de que tiene algo que ver con bit-wise y bit shifting. Pero no tengo idea de cómo hacerlo.
Por ejemplo:
int myInt;
// some code
byte b1, b2 , b3; // b1 is most significant, then b2 then b3.
* Nota, soy consciente de que un int es de 4 bytes y los tres bytes tienen una posibilidad de desbordamiento / desbordamiento.
Solución
Para obtener el byte menos significativo:
b3 = myInt & 0xFF;
El segundo byte menos significativo:
b2 = (myInt >> 8) & 0xFF;
Y el tercer byte menos significativo:
b1 = (myInt >> 16) & 0xFF;
Explicación :
AND bit a bit un valor con 0xFF (11111111 en binario) devolverá los 8 bits menos significativos (bits 0 a 7) en ese número. Al desplazar el número a la derecha 8 veces, se colocan los bits 8 a 15 en las posiciones 0 a 7, de modo que AND con 0xFF devolverá el segundo byte. Del mismo modo, desplazar el número a la derecha 16 veces coloca los bits 16 a 23 en las posiciones de bit 0 a 7, de modo que AND con 0xFF devuelve el tercer byte.
Otros consejos
byte b1 = (myint >> 16) & 0xff;
byte b2 = (myint >> 8) & 0xff;
byte b3 = myint & 0xff;
No estoy seguro de cómo funciona esto en Java, no soy un desarrollador de Java
Un int no cabe en 3 bytes. Sin embargo, suponiendo que sepa que estos en particular lo hacen:
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);
salidas 0 0 1