entero convertir bytes array java type-conversion

convertir - byte[] to int[] java



Convertir de byte a int en java (6)

Los bytes se convierten de forma transparente a ints.

Sólo decir

int i= rno[0];

He generado un número aleatorio seguro y puse su valor en un byte. Aquí está mi código.

SecureRandom ranGen = new SecureRandom(); byte[] rno = new byte[4]; ranGen.nextBytes(rno); int i = rno[0].intValue();

Pero estoy recibiendo un error:

byte cannot be dereferenced


Los tipos de datos primitivos (como el byte) no tienen métodos en java, pero puede hacerlo directamente:

int i=rno[0];


Pensé que sería:

byte b = (byte)255; int i = b &255;


Si desea combinar los 4 bytes en un solo int, debe hacer

byte b = (byte)0xC8; int v1 = b; // v1 is -56 (0xFFFFFFC8) int v2 = b & 0xFF // v2 is 200 (0x000000C8)

Yo uso 3 operadores especiales | es el OR lógico a nivel de bits & es el AND lógico y << es el desplazamiento a la izquierda

en esencia, combino los 4 bytes de 8 bits en un solo int de 32 bits cambiando los bytes en su lugar y organizándolos juntos

También me aseguro de que cualquier promoción de letreros no afecte el resultado con & 0xff


Su matriz es de primitivas de byte , pero está tratando de llamar a un método en ellos.

No necesita hacer nada explícito para convertir un byte en un int , solo:

int i=rno[0];

... ya que no es un abatimiento.

Solo para completar la información # 1: Si desea utilizar los diversos métodos de Byte por alguna razón ( no es necesario que lo haga aquí ), podría usar una conversión de boxeo :

Byte b = rno[0]; // Boxing conversion converts `byte` to `Byte` int i = b.intValue();

O el constructor de Byte :

Byte b = new Byte(rno[0]); int i = b.intValue();

Pero una vez más, no necesitas eso aquí.

Solo para completar la información # 2: si fuera un downcast (por ejemplo, si estaba intentando convertir un int en un byte ), todo lo que necesita es un cast:

int i; byte b; i = 5; b = (byte)i;

Esto asegura al compilador que usted sabe que es un downcast, por lo que no recibe el error "Posible pérdida de precisión".


int i= (rno[0]<<24)&0xff000000| (rno[1]<<16)&0x00ff0000| (rno[2]<< 8)&0x0000ff00| (rno[3]<< 0)&0x000000ff;

La mayoría de las veces v2 es la forma que realmente necesita.