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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top