Thema: Hash-Funktion

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.177 Beiträge
 
Delphi 12 Athens
 
#21

Re: Hash-Funktion

  Alt 29. Dez 2008, 14:57
erstmal nur was zum Code

die "globalen" Variablen sind etwas verwirrend (beim Codeverstehn, da man nicht so direkt nachvollziehen kann wie die wohin übergeben und verwendet werden)
Delphi-Quellcode:
var schluessel: byte; //primär Schlüssel
    high, low: byte;
    vz, laenge, sS : integer;
    ch : boolean;
dann wäre es nicht nötig gewesen intern je eine Funktion für String und ByteArra zu machen.
(doppelter Code)

mit String hast'e unter D2009 einige Probleme, da dieses dort standardmäig ein UnicodeString ist (2 Byte pro Char) ... wär wohl besser AnsiString zu verwenden

ist dir aufgefallen, daß String und ByteArray eine unterschiedliche Indizierung der Elemente verwenden?
(so auf dn ersen blick sieht es so aus, als wenn du immer von 1 bis Length-1) arbeitest, aber
ByteArray: 0 bis Length-1
String: 1 bis Length
was doch eigentlich in 'ner fehlerhaften/unterschiedlichen Berechnung resultieren dürfte (noch nicht getestet)

nja und auf ein/zwei Optimierungen geh ich erstmal nicht ein, da es hier wohl mehr nur auf das Prinzip (die Berechnung) ankommt



[add]
im Anhang mal die Unit ohne mehrfachen Code für String und ByteArray (jetzt geben beide Hash-Funktionen auch auf jedenfall das Selbe Ergebnis aus)

es sollte aber zusätzlich dennoch die Sache mit den "globalen" Variablen reguliert werden!

Dieses hier (siehe folgender Code) liefert mit deinem Original-Quellcode unterschiedliche Hashs,
obwohl die übergebenen Daten den selben Inhalt aufweisen und es sollte doch keinen Unterschied machen, ob die Daten in einer "Datei" (TByteM) oder einem "Text" (String) vorliegen

Delphi-Quellcode:
var S: String;
    B: TByteM;
begin
  S := '123456789';
  SetLength(B, Length(S));
  Move(S[1], B[0], Length(S));
  Edit1.Text := hash(S);
  Edit2.Text := hash(B);
end;
Code:
Edit1: 8C131659DD81F2174918ECE7A386C19C0215B56C5C838A21BB127EF1158053A6
Edit2: 25CFAF1DA1ADD7457F9B158B637943B33B5781F1313BAF1F0913DD5DF709118B
Angehängte Dateien
Dateityp: pas ufp64_937.pas (7,5 KB, 16x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat