Einzelnen Beitrag anzeigen

blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#13

Re: Spezielles CRC-16: Übersetzung aus C++ (omg)

  Alt 14. Apr 2008, 13:33
Hallo.

Vielen Dank für eure Hilfe. Ihr habt mir sehr geholfen!

Zitat von Muetze1:
Ich habe bei dem Code zuvor eigenmächtig eine Optimierung gemacht, die aber zu einem falschen Ergebnis führt. Von daher habe ich oben den Code korrigiert. Bitte den Code erneut ausprobieren.
Deine Veränderung hatte ich bei dem Codevergleich C/Delphi zwar bemerkt, aber ich hatte ebenfalls nicht erkannt, dass durch die Ausklammerung des "AResult SHL 1" die If-Abfrage beeinflusst wird. Mit dem korrigierten Code wird nun die Prüfsumme korrekt wie im Originalprogramm berechnet.

Zitat von gammatester:
Das CRC-Polynom ist das altbekannte CRC-16-CCITT (Dein Code benutzt den Startwert $FFFF statt wie meist $0000);
Gut, zu wissen, wie der Algorithmustyp genau heißt. Danke für den Hinweis. Trotzdem scheint mir die Funktion ein Exot zu sein, da der Programmierer auch irgendetwas mit dem Wert $1021 (als "Poly") macht

Zitat von Muetze1:
Nein, "Initial value" wird schon mit einberechnet, da "Automatic save #1" schon zwei Leerzeichen hat. Er fängt also die CRC Berechnung mit dem "#" von "#1" an.
Ich verstehe dieses ganze mit dem >= '' nicht wirklich. Es werden scheinbar die ASCII-Werte des Chars verglichen. Ich konnte aber wie gesagt mit dem Delphi-Code durch showmessage(lData); innerhalb der While-Schleife nachweisen, dass der CRC tatsächlich mit "Initial value" beginnt. Das ist auch absolut korrekt so, da die erste Zeile der Dateikopf ist und nach dem # die CRC-Summe als Dezimal stehen muss.

Der originale C-Code mit dem >= '' erscheint mir irgendwie etwas unprofessionell. Hätte man besser lösen können. Es ist für dritte Personen ohne Debugging-Tools unklar zu erkennen. Jetzt, wo ich die Prüfsummen jedoch korrekt berechnen kann, kann ich die Funktionen für Stringeingaben anstelle von Dateieingaben anpassen.

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat