Tengo un número entero: 1695609641
cuando uso el método:
String hex = Integer.toHexString(1695609641);
system.out.println(hex);
da:
6510f329
pero quiero una matriz de bytes:
byte[] bytearray = new byte[] { (byte) 0x65, (byte)0x10, (byte)0xf3, (byte)0x29};
¿Cómo puedo hacer esto?
Respuestas:
Usar ByteBuffer de Java NIO es muy simple:
salida:
fuente
"0x%02X"
si siempre desea dos caracteres hexadecimales, así como hexadecimales en mayúsculas, por ejemplo,System.out.format("0x%02X", (byte) 10)
pantallas0x0A
.Qué tal si:
La idea no es mía . Lo tomé de alguna publicación en dzone.com .
fuente
>>>
lugar del operador de desplazamiento a la derecha>>
( docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html ) por lo que el comportamiento puede no ser el deseado / como se esperaba con números con y sin signoBigInteger.valueOf(1695609641).toByteArray()
fuente
BigInteger.toByteArray()
estados: "La matriz contendrá el número mínimo de bytes necesarios para representar este BigInteger ..."fuente
Usando guayaba :
fuente
fuente
fuente
Los fragmentos a continuación funcionan al menos para enviar un int sobre UDP.
int a la matriz de bytes:
matriz de bytes a int:
fuente
Debido a que generalmente desea convertir esta matriz nuevamente en un int en un punto posterior, estos son los métodos para convertir una matriz de entradas en una matriz de bytes y viceversa:
Tenga en cuenta que debido a la propagación de signos y demás, se necesitan "& 0xFF ..." al convertir de nuevo a int.
fuente
para el primer byte
para el segundo y bucle, etc., escribir en una matriz de bytes preasignada. Un poco desordenado, desafortunadamente.
fuente
La clase org.apache.hadoop.hbase.util.Bytes tiene muchos métodos prácticos de conversión de bytes [], pero es posible que no desee agregar todo el jar de HBase a su proyecto solo para este propósito. Es sorprendente que no solo falte AFAIK de este método del JDK, sino también de bibliotecas obvias como commons io.
fuente
Mi intento:
Con ella puedes hacer esto:
La clase completa está aquí: https://gist.github.com/superbob/6548493 , admite la inicialización desde cortos o largos
fuente
Si estás usando apache-commons
fuente