CRC-Berechnung in C

Ich habe ein Gerät, das sendet mir die Daten mit CRC-Berechnung.
Alle 16 Bytes gibt es 2 CRC-Bytes.
Das generator-Polynom x16 + x13 + x12 + x11 + x10 + x8 + x6 + x5 + x2 + 1

Mein code sieht wie folgt aus:

int crc16(unsigned char *addr, int num, int crc)
{
    uint16_t poly = 0x3D65;
    int i;
    for (; num > 0; num--)           /* Step through bytes in memory */
    {
        crc = crc ^ ((unsigned short)*addr++ << 8);         /* Fetch byte from memory, XOR into  CRC top byte*/
        for (i = 0; i < 8; i++)      /* Prepare to rotate 8 bits */
        {
            if (crc & 0x10000)       /* b15 is set... */
                crc = (crc << 1) ^ poly;    /* rotate and XOR with XMODEM polynomic */
            else                     /* b15 is clear... */
                crc <<= 1;           /* just rotate */
        }                            /* Loop for 8 bits */
        crc &= 0xFFFF;               /* Ensure CRC remains 16-bit value */
     }                               /* Loop until num=0 */
     return(crc);                    /* Return updated CRC */
}

Ich hab auch schon versucht diesen code mit anderen Polynome wie 0x9CB2. Ich denke, dass es ein Fehler liegt im code.

  • Und Ihre Frage ist .... was genau?
  • Können Sie erläutern, wie mehr die Frage, bitte? sagen Sie uns, wo genau das problem liegt...
  • Ok, also Sie denken, dass es ein Fehler im code. Aber warum denken Sie, dass? Was genau funktioniert nicht? Die falsche Ergebnisse erhalten Sie?
  • Warum tun Sie speichern in einem byte in ein 16-bit-und XOR-Verknüpfung mit dem ms-byte? Dies scheint sehr seltsam zu mir.
  • Wie funktioniert die Dokumentation des Gerätes beschreiben die CRC-neben dem Polynom? Die CRC-bits gespeichert werden können in beliebiger Reihenfolge, es könnte sein, ein Anfangswert von null Verschieden, und es könnte sein, pre und/oder post-Klimaanlage. Lesen Sie ross.net/crc/download/crc_v3.txt .
  • Können Sie ein Beispiel geben von 16 bytes Daten und 2 byte crc von dem Gerät?
  • Kann man den online live CRC-calculator generieren, die gleiche CRC wie Sie Ihr Gerät?

InformationsquelleAutor hp58 | 2012-05-31
Schreibe einen Kommentar