Saltar al contenido

Convertir de byte a int en java

Te recomendamos que pruebes esta respuesta en un entorno controlado antes de pasarlo a producción, saludos.

Solución:

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

No necesita hacer nada explícito para convertir un byte a una intsólo:

int i=rno[0];

…ya que no es un abatimiento.

Tenga en cuenta que el comportamiento predeterminado de byte-para-int conversión es conservar el signo del valor (recuerde byte es un tipo firmado en Java). Entonces, por ejemplo:

byte b1 = -100;
int i1 = b1;
System.out.println(i1); // -100

Si estabas pensando en el byte como sin firmar (156) en lugar de firmado (-100), a partir de Java 8 hay Byte.toUnsignedInt:

byte b2 = -100; // Or `= (byte)156;`
int = Byte.toUnsignedInt(b2);
System.out.println(i2); // 156

Antes de Java 8, para obtener el valor equivalente en el int necesitarías enmascarar los bits de signo:

byte b2 = -100; // Or `= (byte)156;`
int i2 = (b2 & 0xFF);
System.out.println(i2); // 156

Solo para completar #1: Si usted hizo desea utilizar los diversos métodos de Byte por alguna razón (no necesitas estar 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 Byte constructor:

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

Pero de nuevo, no necesitas eso aquí.


Solo para completar #2: Si fueron un downcast (por ejemplo, si estaba tratando de convertir un int a un byte), todo lo que necesitas es un yeso:

int i;
byte b;

i = 5;
b = (byte)i;

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

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

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

si desea combinar los 4 bytes en un solo int, debe hacerlo

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

Yo uso 3 operadores especiales | es el OR lógico bit a bit & 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 juntándolos con OR

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

Te mostramos comentarios y valoraciones

Nos encantaría que puedieras mostrar este enunciado si lograste el éxito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *