Originariamente inviato da jeky84
ho provato a dare uno sguardo all'indirizzo che mi hai segnalato...ma non ci capisco niente anche perchè è in inglese...
Beh ok ma a parte l'inglese ..... hai scaricato i sorgenti??? Il sorgente di quel CRC8 è banalissimo. C'è 1 array predefinito di 256 byte con valori "precalcolati" e ci sono dei metodi che dato uno o più byte e il crc "corrente", fanno un "update" e ritornano il nuovo crc aggiornato. E l'update si può ripetere finché non hai finito i dati, ovviamente. Tutto qui.
E se vuoi il "mio" codice, l'ho trovato. L'avevo postato su un altro forum ma lo posto di seguito. Nota che non ho usato l'approccio "a tabella" ma l'approccio dello shift dei bit. Quindi il mio è meno efficiente!
codice:
public class TestCrc8Atm {
// Polinomio CRC-8 ATM: x^8 + x^2 + x + 1
public static final byte CRC8ATM_POLY = 0x07;
public static void main(String[] args) {
// sequenza di test tipica: '123456789', risultato: 0xF4
byte[] data = { 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39 };
byte crc = crc8Atm(data);
System.out.format("CRC 8-ATM = %02X%n", crc);
}
public static byte crc8Atm(byte[] v) {
byte crc = 0;
for (byte b : v) {
crc = (byte) (crc ^ b);
for (int i = 0; i < 8; i++) {
crc = (byte) (crc << 1 ^ ((crc & 0x80) != 0 ? CRC8ATM_POLY : 0));
}
}
return crc;
}
}