Pessoal, preciso converter um array de bytes (hoje só com 3 posições) para um int. Lembrando que meu buffer esta no format big endian…
Converter array de byes para int
5 Respostas
O que tu precisa fazer especificamente?
Geralmente pra isso se utilizam operações de shift (<< e >>)
Por exemplo para armazenar, 3 bytes em um int com os bytes nesta ordem byte[2] byte[1] byte[0] (se não me enganei no que tu quiz dizer quanto ao big endian)
public class Teste {
public static void main(String[] args) {
byte val[] = new byte[3];
int integer32;
val[0] = 120;
val[1] = 10;
val[2] = 80;
integer32 = val[0] << 8;
integer32 = val[1] << 16;
integer32 = val[2] << 24;
}
}
Este código faria com que os dados fossem armazenados nos 3 primeiros bytes do integer(80 10 120 0) da esquerda pra direita.
É isso que precisas?
Espero ter ajudado
Obrigado pela resposta, eu estou trabalhando em um sistema de comunicação. E um dos campos do protocolo tem 3 bytes. Vou testar aqui…
Valew
Uma boa é usar a classe ByteBuffer e a Channel. Ela já tem suporte para lidar de forma transparente com endianess.
E, diz uma coisa. A outra ponta do protocolo pode enviar dados unsigned? Eles são meio chatos de tratar em java…
Eu to tendo que trabalhar nos campos fazendo um & com 0xFF pq no java é tudo com sinal… Mas até agora não tive problemas.
Estou usando o ByteBuffer do java.nio porém quando tenho campos com quantidade diferentes de bytes tenho que jogar pra um array e converter no braço… Para efeitos de teste estou usando o bytebuffer e completando os bytes faltantes com zero… Mas me parece “POG” criar um bytebuffer soh para converter um tipo de dado…
int numero = 0;
numero = numero + byteBuffer.get();
numero << 8; //Afastamos o número lido 8 bytes para a esquerda
numero = numero + byteBuffer.get();
numero << 8; //Afastamos o número lido mais 8 bytes para a esquerda
numero = numero + byteBuffer.get();