CRC-CCITT-Umsetzung

Ich bin mit der folgenden Funktion zum erzeugen einer CRC-Summe, und es erscheint nicht wieder die gleiche Prüfsumme, wenn im Vergleich zu online CRC-CCITT-Rechner.

Diese Funktion speziell verwendet das XMODEM-CRC-Generierung mit einem 0x8408 Polynom mit einer ersten fcs-0xFFFF.

uint16_t crc16(uint8_t byte, uint16_t fcs)
{
    uint8_t bit;

    for(bit=0; bit<8; bit++)
    {
        fcs ^= (byte & 0x01);
        fcs = (fcs & 0x01) ? (fcs >> 1) ^ 0x8408 : (fcs >> 1);
        byte = byte >> 1;
    }
    return fcs;
}

Mache ich etwas falsch? Wenn ich sende 0xFF oder 0x00 bekomme ich nicht die gleiche Prüfsumme wie ich auf http://depa.usst.edu.cn/chenjq/www2/SDesign/JavaScript/CRCcalculation.htm

printf("%04X\n", crc16(0x31, 0xFFFF)); //returns 2F8D
Ein bemerkenswerter Unterschied ist, dass du mit "xmodem", nicht die "ccitt" Geschmack der konstant - was auch erklären könnte, warum es anders.
Die .cn-link funktioniert nicht.

InformationsquelleAutor AlphabetaPhi | 2013-06-19

Schreibe einen Kommentar