Estoy leyendo 8 bytes de datos desde un dispositivo de hardware. Necesito convertirlos en un valor numérico. Creo que quiero convertirlos a uno largo, ya que debería ajustarse a 8 bytes. No estoy muy familiarizado con Java y las operaciones de tipo de datos de bajo nivel. Parece que tengo dos problemas (aparte del hecho de que casi no hay documentación para el hardware en cuestión), los bytes esperan no estar firmados, por lo que no puedo hacer una conversión de entero recto. No estoy seguro de qué endianness son.¿Cómo convierto un byte a un largo en Java?
Cualquier consejo sería apreciado.
Terminamos con esto (tomado de un código fuente que probablemente debería haber leído hace una semana):
public static final long toLong (byte[] byteArray, int offset, int len)
{
long val = 0;
len = Math.min(len, 8);
for (int i = (len - 1); i >= 0; i--)
{
val <<= 8;
val |= (byteArray [offset + i] & 0x00FF);
}
return val;
}
¿Por qué necesita convertir esos 8 bytes en un solo valor numérico? Si de hecho son bytes componentes de un valor mayor, entonces no están "firmados" ni "sin firmar". Si no sabes cuál es su endianness, entonces simplemente no puedes interpretarlos como algo de gran valor. –
Sé que son valores sucesivos (un contador magnético) por lo que a través de prueba y error puedo encontrar cuando informa el incremento correcto. Necesito convertirlos a un valor numérico único para determinar su tasa de cambio. – Jotham
Debería reemplazar 0x00FF por 0xFFL ya que eso expresaría mejor su intento de convertir un byte a un largo. – starblue