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.
Die .cn-link funktioniert nicht.
InformationsquelleAutor AlphabetaPhi | 2013-06-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werfen Sie einen Blick auf Greg Koch ' s ausgezeichnete Katalog von CRCs. Es ist die Variante, die oft fälschlicherweise identifiziert als CCITT-CRC, was es nicht ist. Das ist das, was Ihren code, mit dem
0xFFFF
Initialisierung, erscheint computing, obwohl reflektiert. Die Kermit-CRC ist die eigentliche CRC-CCITT. Um die CCITT-CRC, sollten Sie beginnen mit null, nicht0xFFFF
. Das XMODEM-CRC ist noch anders, wie die CRC Kermit, aber unreflektiert (also die bits gehen in der Spitze, und Sie exklusiv-oder mit0x1021
).Sie nicht verwenden können, 0x1021 in den obigen code. Müssen Sie auch ändern Sie den code im feed werden die bits von oben. Sie können nicht umkehren kann, die polynomial (oder in diesem Fall unreverse es), ohne auch umkehren die Reihenfolge der bit.
Wie Sie wissen, was CRC, die Sie benötigen? Was sind für Sie die Kommunikation mit?
was der code oben? 0x2672 ist die richtige XMODEM-crc für ein einzelnes Daten-byte 0x31. Ich benutzte alte Intel 8080 CP/M XMODEM-code für die crc-Berechnung um den Algorithmus zu testen. sarvankumar_t Antwort zu haben scheint, den richtigen code.
InformationsquelleAutor Mark Adler
Ich lese deine Fragen und ich hatte auch das ähnliche problem wie du.
Habe ich dieses Problem gelöst für die Berechnung der CRC-CCITT in XMODEM. hier bin ich anbringen das Beispiel-Programm zur Berechnung der CRC-CCITT.
Habe ich versucht die Daten mit dem online-Konverter, und dieses Programm. Bitte verwenden Sie, wenn Sie dies wünschen.
CRC-sollte definiert sein als unsigned short, da die
crc16
- Funktion gibt einen unsigned short. CRC ist definiert als ein int, die auf den meisten Systemen ist 4 bytes.Ja, diese kann aber helfen, für den neuen Menschen, wenn Sie haben ähnliche Zweifel wie diese..
mir geholfen haben!! Danke für die explizite follow @sarvankumar_t ! explizite Typen bevorzugt würde (z.B.
uint16_t
)InformationsquelleAutor sarvankumar_t
Ich verwende den folgenden code zur Berechnung eines CRC-CCITT (0xFFFF):
Das ist nicht die richtige CCITT Umsetzung und nicht die test-strings. bitte siehe srecord.sourceforge.net/crc16-ccitt.html
InformationsquelleAutor Vincent