Divisão/MOD entre Binários

0 respostas
F

Galera to fazendo calculo de CRC antes de enviar um arquivo. Bom antes de enviar o arquivo pego o binário dele:

binario = binario.concat(Integer.toString(result, 2).trim());

Explicação: VOu concatenando e ao final tenho o binário do arquivo, beleza

Agora chamos uma função que calcula o meu Novo binário que leva com ele ao final meu checksum.

public static String calculaCrcOrigem (String binarioArquivo){
    	 String binarioOriginal = binarioArquivo.trim();
    	 //Polinomio gerador
    	 String polGerador = "101001011";
    	 binarioArquivo = binarioArquivo.concat("00000000");    	 
    	 System.out.println("Binario com zeros adicionados: " + binarioArquivo + " \n");
    	 //Converte binario original para numero binario (Prepara para divisao)
    	 BigInteger binarioArquivoInt = new BigInteger(binarioArquivo.trim(), 2);
    	 //Converte polinomio para numero binario (Prepara para divisao)
    	 BigInteger polInt = new BigInteger(polGerador.trim(), 2);
    	 //Pega o MOD entre binario e polinomio
    	 int resultado = binarioArquivoInt.mod(polInt).intValue();
    	 System.out.println("MOD de binario e polinomio: " + Integer.toString(resultado, 2) + " \n");
    	 //Concatena o no binário original (Sem os zeros) com o MOD
    	 binarioOriginal = binarioOriginal.concat( Integer.toString(resultado, 2) );
    	 System.out.println("Resultado final de binario com MOD: " + binarioOriginal + "\n");
    	 
    	 return binarioOriginal;
    	}

Nessa função o que está acontecendo. Bom ele tem que pegar o binário, acrescentar quantidade de bits do polinomio - 1, que no meu caso o polinomio será fixo então já coloco 8 zeros.

Depois preciso dividir isso pelo polinomio gerador, fica algo tipo:

1010100100010110100111010100100010110101001000101101001110101001000101101010010001011010011101010010001011010100100010110100111010100100010110101001000101101001110101001000101101010010001011010011101010010001011010100100010110100111010100100010110101001101101010101001000101101001110101001000101101010010001011010011101010010001011010100100010100000000

MOD

101001011

Bom, pelas regras de calculo de CRC meu resultado tem que SEMPRE ser igual a base do meu CRC, que é base 8.

O meu problema é, está gerando resultados com abses diferentes, tipo 9,7, 8 as vezes, mas teria que sempre ser 8.
Já não sei o que pode ser, estou postando aqui para ver se alguém pode me dar uma dica, ja passou por isso, ou se o Java pode estar em algum lugar tratando diferente isso :slight_smile:

Agradeço as respostas
Valeu

Criado 24 de outubro de 2006
Respostas 0
Participantes 1