AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CRC im Eigenbau...

Ein Thema von turboPASCAL · begonnen am 15. Apr 2009 · letzter Beitrag vom 15. Apr 2009
Antwort Antwort
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#1

CRC im Eigenbau...

  Alt 15. Apr 2009, 17:19
Hi,

ich habe mal 'ne Ferage zum CRC einer Datei. Meises Wissens ist es ja recht einfach einen CRC bzw. besser gesage eine Checksumme einer
Datei zu erstellen. Das einfachste dürfte nun mal sein eine Quersumme der in der/ einer Datei enthaltenen Bytes zu erstellen.

zB so:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  fs: TFileStream;
  c: integer;
  crc: int64;
  crc2: int64;
  count: integer;
begin
  fs := TFileStream.Create(ParamStr(0), fmOpenRead {or ...} );
  try
    c := 0;
    crc := 0;
    crc2 := 0;
    count := 0;

    fs.Position := 0;

    // "- sizeof(cardinal)" als Platzhalter
    while fs.Position <> fs.Size - sizeof(crc2) do
    begin
      fs.Read(c, 1);
      crc := crc + c + count; // count => zb. indexen der Nullwerte
    end;

    fs.Position := fs.Size - sizeof(crc2);
    fs.Read(crc2, sizeof(crc2));

  finally
    FreeAndNil(fs);
  end;

  if crc <> crc2 then Application.Terminate; // ...
end;

end.
Meine Frage dazu, wie könnte man das beschleunigen und wozu sind die CRC-Tabellen in Prüfalgor. ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#2

Re: CRC im Eigenbau...

  Alt 15. Apr 2009, 17:40
also c müste doch ein Byte sein.

und wenn du den gesammten fs vorher in einen TMemorystream kopierst und dann daraus arbeitest müste es schon deutlich schneller sein .
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

Re: CRC im Eigenbau...

  Alt 15. Apr 2009, 17:50
Ja, ist ja nur zusammengekloppt. Im Fall eines Falles könnte man auch noch einen extra Thread starten der das während des Programmablaufes
regelt.

Mir geht es nur darum das ich nicht verstehe was die "CRC-Leute" mit den Tabellengedöns machen...

"Nullpeilungssache das"
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

Re: CRC im Eigenbau...

  Alt 15. Apr 2009, 18:35
Die ist klar, dass das da oben kein CRC ist?

http://de.wikipedia.org/wiki/Cyclic_Redundancy_Check

Zitat:
Durch Verwendung einer Tabelle, die etwa bei einer CRC-8 für jedes der 256 möglichen Bytes den zugehörigen CRC-Wert enthält, lässt sich obiger Algorithmus auf das Achtfache beschleunigen.
Das wird der Grund sein, dass die Typen Tabellen verwenden. Wenn man nicht nur für ein, sondern für 2 Bytes Tabellen erstellt dürfte das ganze nochmal etwas beschleunigt werden ...
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#5

Re: CRC im Eigenbau...

  Alt 15. Apr 2009, 18:56
Ja, ist ja eine Quersumme. Man kann aber auch damit feststellen ob eine Datei verändert wurde.

Bedenke bitte das sich bei mir bei den Begriffen Polynom ect. die Gehirnwindungen in Staub verflüchtigen...
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: CRC im Eigenbau...

  Alt 15. Apr 2009, 19:32
Zitat von turboPASCAL:
Ja, ist ja eine Quersumme. Man kann aber auch damit feststellen ob eine Datei verändert wurde.

Bedenke bitte das sich bei mir bei den Begriffen Polynom ect. die Gehirnwindungen in Staub verflüchtigen...
Nicht nur bei dir

Manchmal ist es aber auch nur wichtig das es funktioniert, nicht aber wie
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#7

Re: CRC im Eigenbau...

  Alt 15. Apr 2009, 20:46
Zitat von turboPASCAL:
ich habe mal 'ne Ferage zum CRC einer Datei. Meises Wissens ist es ja recht einfach einen CRC bzw. besser gesage eine Checksumme einer
Datei zu erstellen. Das einfachste dürfte nun mal sein eine Quersumme der in der/ einer Datei enthaltenen Bytes zu erstellen.
Meine Frage dazu, wie könnte man das beschleunigen und wozu sind die CRC-Tabellen in Prüfalgor. ?
Hallo,

Quersumme und CRC sind völlig verschiedene Sachen. Quersumme muss man hoffentlich nicht noch erklären, bei CRC geht es darum, nicht irgendein Polynom zu wählen, sondern eines mit maximaler Periode, bei CRC16 also 65536. Es gibt nämlich unzählige Polynome, bei denen das nicht der Fall ist, die sich also in kürzeren Abständen wiederholen, um den entsprechenden Faktor ist dann die Sicherheit geringer. Es ist also längst nicht jedes Polynom bzw. die entsprechende Rückkopplung geeignet. Ob Mehrfach-Fehler erkannt werden, ist auch ein Gesichtspunkt.

Das ist also mathematisch abgesichert und alles andere als "Gedöns" - die Leute, die sich das ausgedacht haben, mögen ja inzwischen tot sein, aber das heisst noch lange nicht dass sie blöd waren.

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von seim
seim

Registriert seit: 11. Nov 2007
83 Beiträge
 
#8

Re: CRC im Eigenbau...

  Alt 15. Apr 2009, 21:00
Willst du mir sagen, dass bei CRC16 2^16 als Ding zum XORen benutzt wird und beim CRC8 eben 2^8?

Ich glaub das Ding mit dem XOR-t wird bezeichnet man als Polynom y?
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#9

Re: CRC im Eigenbau...

  Alt 15. Apr 2009, 21:31
Also ich finde, der Pseudocode hier veranschaulicht das Verfahren schon ganz gut:
Code:
Schieberegister := 0000... (Startwert)
solange Bits im String verbleiben:
  falls das am weitesten links stehende Bit vom Schieberegister
        ungleich zum nächsten Bit aus dem String ist:
    Schieberegister := (Schieberegister linksschieben um 1, rechtes Bit 0)
                       xor CRC-Polynom
                 
  andernfalls:
    Schieberegister := Schieberegister linksschieben um 1, rechtes Bit 0
  nächstes Bit im String
Schieberegister enthält das Ergebnis
"Schieberegister" ist halt der Speicher in dem das ganze stattfindet.

Und mit den Tabellen in denen das ganze Zeug beretis abgespeichert ist, erspart man sich halt das "linksschieben um 1" weil das auf modernen CPUs so schlecht möglich ist (wenn die Datenmengen größer werden)
Mit den Tabellen kann man eben immer um 8 verschieben (also immer 1 Byte)
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#10

Re: CRC im Eigenbau...

  Alt 15. Apr 2009, 23:10
Ah, jetzt ja.... danke.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz