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
Agradeço as respostas
Valeu