Eu tenho um número inteiro: 1695609641
quando eu uso o método:
String hex = Integer.toHexString(1695609641);
system.out.println(hex);
dá:
6510f329
mas eu quero uma matriz de bytes:
byte[] bytearray = new byte[] { (byte) 0x65, (byte)0x10, (byte)0xf3, (byte)0x29};
Como posso fazer isso?
Respostas:
O uso do ByteBuffer do Java NIO é muito simples:
resultado:
fonte
"0x%02X"
se você sempre quiser dois caracteres hexadecimais e hexadecimais em maiúsculas, por exemplo,System.out.format("0x%02X", (byte) 10)
displays0x0A
.E se:
A ideia não é minha . Eu tirei isso de algum post no dzone.com .
fonte
>>>
em vez do operador de mudança à direita>>
( docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html ), para que o comportamento não seja o desejado / como esperado com assinado vs números não assinadosBigInteger.valueOf(1695609641).toByteArray()
fonte
BigInteger.toByteArray()
states: "A matriz conterá o número mínimo de bytes necessários para representar este BigInteger ..."fonte
Usando a goiaba :
fonte
fonte
fonte
Os blocos abaixo funcionam pelo menos para enviar um int pelo UDP.
int para byte da matriz:
matriz de bytes para int:
fonte
Como geralmente você deseja converter essa matriz em um int posteriormente, aqui estão os métodos para converter uma matriz de entradas em uma matriz de bytes e vice-versa:
Observe que, devido à propagação do sinal, é necessário o "& 0xFF ..." ao converter de volta para o int.
fonte
para o primeiro byte
para o segundo e loop etc., escrevendo em uma matriz de bytes pré-alocada. Um pouco bagunçado, infelizmente.
fonte
A classe org.apache.hadoop.hbase.util.Bytes possui vários métodos úteis de conversão de bytes [], mas talvez você não queira adicionar todo o jar do HBase ao seu projeto apenas para esse fim. É surpreendente que não apenas esse método esteja ausente do AFAIK do JDK, mas também de bibliotecas óbvias como commons io.
fonte
Minha tentativa:
Com ele você pode fazer isso:
A turma completa está aqui: https://gist.github.com/superbob/6548493 , suporta inicialização de curtos ou longos
fonte
Se você estiver usando apache-commons
fonte