Converter array de byes para int

5 respostas
Guitar_Men

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…

5 Respostas

E

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] &lt;&lt; 8;
        integer32 = val[1] &lt;&lt; 16;
        integer32 = val[2] &lt;&lt; 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

Guitar_Men

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

ViniGodoy

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…

Guitar_Men

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…

ViniGodoy
Você pode pegar com um get() simples e afastar os bits para o próximo byte:
int numero = 0;

numero = numero + byteBuffer.get();
numero &lt;&lt; 8; //Afastamos o número lido 8 bytes para a esquerda
numero = numero + byteBuffer.get();
numero &lt;&lt; 8; //Afastamos o número lido mais 8 bytes para a esquerda
numero = numero + byteBuffer.get();
Criado 21 de agosto de 2010
Ultima resposta 22 de ago. de 2010
Respostas 5
Participantes 3