Necesito convertir una matriz de 2 bytes (byte [2]) a un valor entero en java. ¿Cómo puedo hacer eso?Java: Convertir bytes a entero
Respuesta
Se puede utilizar para este ByteBuffer
:
ByteBuffer buffer = ByteBuffer.wrap(myArray);
buffer.order(ByteOrder.LITTLE_ENDIAN); // if you want little-endian
int result = buffer.getShort();
Ver también Convert 4 bytes to int.
+1 para la solución ByteBuffer – Casey
Gracias, funcionó. Will ByteBuffer se ocupa de los bytes firmados y no firmados? – keshav
@keshav: ¿qué quieres decir? No existe el byte "firmado" o "sin firmar". Un byte es solo un grupo de '0's y' 1' s; el ** ** significado es en la forma de interpretar esos números. –
Bueno, cada byte es un número entero en el rango -128..127, por lo que necesita una forma de asignar un par de enteros a un solo entero. Hay muchas maneras de hacerlo, dependiendo de lo que haya codificado en el par de bytes. El más común será almacenar un entero de 16 bits con signo como un par de bytes. Convertir ese nuevo a un número entero depende de si usted lo almacena forma bigEndian:
(byte_array[0]<<8) + (byte_array[1] & 0xff)
o Little Endian:
(byte_array[1]<<8) + (byte_array[0] & 0xff)
En Java, Bytes están firmados, lo que significa que el valor de un byte puede ser negativo y cuando eso suceda, la solución original de @ MattBall no funcionará.
Por ejemplo, si la forma binaria de la matriz de bytes son como este:
entonces myArray [0] es 1000 1101
y myArray [1] es 1000 1101
, el valor decimal de byte 1000 1101
es -115
en lugar de 141 (= 2^7 + 2^3 + 2^2 + 2^0)
si utilizamos
int result = (myArray[0] << 8) + myArray[1]
el valor sería -16191
que está EQUIVOCADO.
La razón por la que su mal es que cuando interpretamos una matriz de 2 bytes en número entero, todos los bytes son sin firmar, por lo que cuando se traduce, se deben mapear los bytes firmados a entero sin signo:
((myArray[0] & 0xff) << 8) + (myArray[1] & 0xff)
el resultado es 36237
, use una calculadora o ByteBuffer para verificar si es correcta (lo he hecho, y sí, es correcto).
muchas gracias por la explicación :) – shadygoneinsane
Además, si se puede usar la biblioteca de guayaba:
Ints.fromByteArray(0, 0, myArray[1], myArray[0]);
Era digno de mención, ya que muchos de los proyectos de uso de todos modos.
Basta con hacer esto:
return new BigInteger(byte[] yourByteArray).intValue();
funciona muy bien en las conversiones de mando Bluetooth, etc. No hay necesidad de preocuparse firmado frente a la conversión sin firmar.
- 1. Cómo convertir un entero a matriz de bytes en php
- 2. Java - ¿Convertir int a Byte Array de 4 bytes?
- 3. Cómo convertir entero a int?
- 4. Convertir 3 bytes en un entero con signo en C#
- 5. Convertir MFC CString a entero
- 6. Haskell Convertir entero a int?
- 7. Entero convertir a WoW Gold
- 8. Cómo convertir a entero int
- 9. Convertir valores RGB a Entero
- 10. Convertir 4 bytes a int
- 11. Cómo convertir a NSString bytes
- 12. Convertir bytes ASCII [] a String
- 13. Convertir manualmente una cadena a un entero en Java
- 14. no pudo convertir una cadena a entero en Java
- 15. Convertir cadena JRuby a matriz de bytes Java, y viceversa
- 16. Cómo convertir un entero a una cadena de bytes de longitud variable?
- 17. conversión de bytes a int en Java
- 18. Convierte Mes cadena a entero en Java
- 19. Convertir cadena a entero en XSLT 1.0
- 20. ¿Convertir cadena a entero/flotar en Haskell?
- 21. Convertir el nombre del mes a entero
- 22. convertir cadena a entero en C++
- 23. Cómo convertir entero a char en C?
- 24. PostgreSQL: ¿Es posible convertir enum a entero?
- 25. ¿Convertir variable de punto flotante a entero?
- 26. Cómo convertir cadena a entero en C#
- 27. Convertir Boole a entero en VB.NET
- 28. Cómo convertir cadena a entero en UNIX
- 29. Cómo convertir un entero a serial
- 30. Convertir la columna de bit a entero
Esta pregunta podría usar alguna aclaración. Tal como está ahora, solo veremos qué quiere decir con qué respuesta selecciona. –