Bit a Bit em um Byte

4 respostas
G

Tem uma variável que é um array de byte de 1 poisção:

byte[] bufferLeitura = new byte[1];

Como faço para ler bit a bit dessa variável?

Abraços!!!

George.

4 Respostas

J

Você quer ler bit a bit do array??? Ou bit a bit do byte que está na primeira posição do array???

Para ler os bits de um byte basta usar esta rotina:

public static boolean getBit(byte b, int posicao) {
        int mascara = 1 << posicao;
        int retorno = b & mascara;
        
        return retorno != 0;
    }

    public static void main(String[] args) {
        for (int j = -128; j < 128; j++) {
            System.out.print(j + ": ");
	        for (int i = 7; i >= 0; i--) {
	            System.out.print((getBit((byte) j, i) ? "1" : "0"));
	        }
	        System.out.println();
        }
    }

Agora para ler os bits do array, você vai ter que saber como é armazenado na memória, se é utilizando big endian ou little endian, e dpois ler cada byte do array… A diferença entre o as 2 maneiras, é que uma (não lembro qual) armazena os valores na ordem sequencial, e a outra na ordem inversa do array…

Espero ter ajudado…
Flw…

G

Cara,

Valeu demais. Ajudou muito. Realmente quero pegar apenas os bits de 1 byte do array de cada vez.

Ajudou demais…

Valeu!!!

George.

G

Cara,

Se não for pedir muito, você poderia me explicar somente essa parte de código abaixo?

int mascara = 1 << posicao; 
        int retorno = b & mascara; 
        
        return retorno != 0;

É pra caso eu queira alterar algo, beleza?

Valeu!

George

J

Bom… um byte possui 8 bits… então ele pode armazenar números de -128 a 127 (bit da esquerda é o sinal)…

O que o código faz é criar uma máscasa 0x00000001 (binário) e usar o shift left movendo o 1 para a posição que você deseja. Portando c vc deseja a posição número 4, a máscara vai fikar assim:
0x00010000 (a posição 0 é a primeira), então uso o operador & com o byte, portanto ele vai me retornar um número qualquer diferente de zero se nessa mesma posição no byte tiver um 1, caso contrário ele me retorna 0…

Flw…

Criado 5 de janeiro de 2005
Ultima resposta 6 de jan. de 2005
Respostas 4
Participantes 2