Ich bin auf der Suche nach einer CRC-8 Prüfsumme - und beim Lesen auf CRC im Allgemeinen stieß ich auf diesen Algorithmus für CCITT-16 (Polynom X^16 + X^12 + X^5 + 1):Wie funktioniert CRC-Algorithmen für CCITT16 und wie bekomme ich für CCITT8
unsigned char ser_data;
static unsigned int crc;
crc = (unsigned char)(crc >> 8) | (crc << 8);
crc ^= ser_data;
crc ^= (unsigned char)(crc & 0xff) >> 4;
crc ^= (crc << 8) << 4;
crc ^= ((crc & 0xff) << 4) << 1;
Alternativ als Makro:
#define crc16(chk, byte) \
{ \
chk = (unsigned char) (chk >> 8) | (chk << 8); \
chk ^= byte; \
chk ^= (unsigned char)(chk & 0xFF) >> 4; \
chk ^= (chk << 8) << 4; \
chk ^= ((chk & 0xFF) << 4) << 1; \
}
ich habe zwei Fragen hier:
- wie ist dieser Algorithmus der aus dem Polynom erhalten? Gibt es einen ähnlichen einfachen Algorithmus für CCITT8 (Polynom X^8 + X^2 + X + 1)?