endgültige CRC für C
Da CRC ist so weit verbreitet, ich bin überrascht durch eine harte Zeit zu finden CRC-Implementierungen in C.
Gibt es eine "definitive" CRC-Berechnung snippet/Algorithmus für C, dass "jeder" verwendet? Oder: gibt es ein gutes CRC Umsetzung jemand dafür verbürgen, und zeigen Sie mir Richtung? Ich bin auf der Suche nach CRC8 und CRC16-Implementierungen im besonderen.
Kommen Sie, daran zu denken, meine situation ist ein wenig unkonventionell. Ich bin das schreiben von C-code für Linux, und der code sollte irgendwann portiert werden an einen mikrocontroller. Es scheint einige mikrocontroller-APIs kommen mit CRC-Implementierungen; in jedem Fall, ich bin auf der Suche nach einer generischen software-Implementierung (ich habe gelesen, dass CRC ist ursprünglich gedacht, um in hardware implementiert).
InformationsquelleAutor der Frage oyvind | 2013-03-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht. Es gibt keine "endgültige CRC" CRC stellt eine Reihe von algorithmen, basierend auf Polynomen. Verschiedene [mehrdeutig] gebräuchliche Namen sind in der Regel basierend auf der Größe (z.B. CRC-8, CRC-32). Leider gibt es verschiedene Versionen für die meisten Größen.
Wikipedia Cyclic Redundancy Check Eintrag listet einige gängige Varianten, aber die richtige Prüfsumme für die bestimmten Domäne verwendet werden muss, oder sonst gibt es Inkompatibilitäten. (Siehe mein Kommentar zu Mike ' s Antwort für wie verwirrend das sein kann!)
Sowieso, wählen Sie eine passende Umsetzung und verwenden Sie es - es gibt keinen Mangel an Beispielen, die online gefunden werden kann. Wenn es geschieht, um eine Bibliothek, die eine geeignete Implementierung dann, mit allen Mitteln, verwenden Sie diese. Jedoch, es gibt keine "standard" - C-Bibliothek für diesen.
Hier sind ein paar Ressourcen:
InformationsquelleAutor der Antwort
Sollte es nicht schwer sein zu finden CRC-Implementierungen in C. Sie finden eine relativ anspruchsvolle Umsetzung der CRC-32 in zlib.
Hier sind Definitionen für verschiedene 16-bit und 8-bit-CRCsdie die Konventionen in diesem ausgezeichnete Einführung in die CRCs.
Hier ist eine einfache Implementierung einer CRC-8:
InformationsquelleAutor der Antwort Mark Adler
Nicht sicher über CRC-8 oder CRC-16, aber es gibt beispielsweise CRC-32-code in RFC 1952. Dieser RFC auch Verweise auf die V. 42 standard, der beschreibt, eine CRC-16 in Kapitel 8.1.1.6.
RFC 1952, sagt aber auch:
So ist Ihre CRC-16 und CRC-32, potenziell. (nehmen Sie nur die zwei niederwertigen bytes des CRC-32.)
InformationsquelleAutor der Antwort mpontillo
Es gibt eine Reihe von verschiedenen algorithmen zur Implementierung von CRCs. Es ist die naive eine, die nicht die Polynomdivision.
Hier ist ein link für die verschiedenen algorithmen in C, für Allgemeine 32-bit CRC-Berechnungen. Der Autor gibt auch einige speed Vergleiche.
Koopman hat eine Webseite, auf der die Leistungen der verschiedenen SFB, als auch als Führer zu den besten CRCs für eine gegebene Länge des Pakets.
InformationsquelleAutor der Antwort Flip