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.