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.
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.
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…
Cara,
Valeu demais. Ajudou muito. Realmente quero pegar apenas os bits de 1 byte do array de cada vez.
Ajudou demais…
Valeu!!!
George.
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
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…