2016-04-04 9 views
-1

Zunächst einmal bin ich mir nicht sicher, ob dies überhaupt der richtige Ort dafür ist, aber ich könnte wirklich jede Hilfe gebrauchen.Zyklische Redundanzprüfung, wie?

So bin ich eine ASCII-Datei angegeben, die die Zeichenfolge abcdefghijklmnopqrstuvwxyz12345-ABCDEFGHIJKLMNOPQRSTUVWXYZ12345a und ich enthält bin soll eine CRC-15-Polynom (1010000001010011), von denen seine angeblich laufen mir eine Antwort von 1a6a zu geben. Ich versuche nur, mich daran zu erinnern, wie er das bekommen hat. Ich habe diese Seite https://www.ghsi.de/CRC/ verwendet, um zu überprüfen, ob ich es richtig verstehe, aber ich bekomme immer 346a. Mein Verständnis ist, dass jedes Zeichen aus der Zeichenfolge einen bestimmten Hex-Wert dafür enthält, also schreibe ich mit dem Taschenrechner die Nachricht in hex und schreibe so etwas wie 61 62 63 64 65 66 67 68 69 6a..., dann starte das von dort.

Jeder Geist hilft mir mit allem hier?

+0

Ist das eine Hausaufgabe? Was hast du bisher probiert? –

+0

@KenClement Ja. Dies sind nur die ersten Schritte des Programms, das ich machen muss. Ich versuche nur herauszufinden, wie er die '1a6a' bekommen hat. Wir haben Papieraufgaben gemacht, aber mit viel niedrigeren Werten, um uns ein Verständnis für CRC zu vermitteln. Ich weiß, wir müssen die Nachricht nehmen und sie in eine Binärdatei übersetzen, dann ein XOR mit dem Polynom machen und der Rest wäre unsere Antwort. Da die Nachricht zu groß für Papier ist, habe ich nicht wirklich viel Spielraum. – RiGid

+0

Der www.ghsi.de/CRC/ Rechner funktioniert bei mir, siehe (https://www.ghsi.de/CRC/index.php?Polynom=1010000001010011&Message=61+62+63+64+65+66+67 + 68 + 69 + 6A + 6B + 6C + 6D + 6E + 6F + 70 + 71 + 72 + 73 + 74 + 75 + 76 + 77 + 78 + 79 + 7A + 31 + 32 + 33 + 34 + 35 + 41 + 42 + 43 + 44 + 45 + 46 + 47 + 48 + 49 + 4A + 4B + 4C + 4D + 4E + 4F + 50 + 51 + 52 + 53 + 54 + 55 + 56 + 57 + 58 + 59 + 5A + 31 + 32 + 33 + 34 + 35 + 61 + 0A). NB: Ein Zeichen einer Zeichenkette enthält keinen Hexadezimalwert, sondern der Hexadezimalwert ist ein Weg (ASCII) zur Kodierung eines Zeichens. – agc

Antwort

1

Da dies eine Hausaufgabe ist, gebe ich entsprechende Vorschläge, aber keinen Code - das ist die Aufgabe des Schülers.

  1. Verarbeiten Sie den Zeichenfolgenwert Byte für Byte, und verarbeiten Sie für jedes Byte die Bits nacheinander. Man kann die Bits von einer Bytefolge ausgehend von 0x80 und von rechts nach oben bis einschließlich 0x01 analysieren. Dies erzeugt eine Maske, die bitweise mit dem aktuellen Byte UND-verknüpft werden kann. (eine?: Operation oder eine if-Anweisung kann verwendet werden, um den Wert in eine 1 oder eine 0 zu disambiguieren.

  2. Simulieren Sie, was eine Hardwareschaltung mit diesem Bit machen würde. Dies kann mit einfachen bitweisen ANDs erfolgen. XORs, Verschiebungen usw.

  3. Es ist durchaus möglich, eine einfache Funktion zu schreiben, die den CRC-Zustand einschließlich des Polynom als Eingabe akzeptiert.

Es gibt mehrere Möglichkeiten, um die Berechnung zu gehen, dieses Wesen nur eine von ihnen. Ich habe eine Funktion von ein paar Zeilen, die diese Berechnung wie beschrieben durchführt, aber wie ich eingangs sagte ist die Hausaufgabe die Aufgabe des Schülers.

Viel Glück für Sie.