![]() |
AW: Wolfgang Ehrhardts CRC/Hash Routinen - kompilieren schlägt fehl - IDE-Bug?
Ich weiß nicht genau von welchen Änderungen du sprichst. Bis auf die Code-Formatierung habe ich nichts ausgeführt.
Irgendetwas mache ich trotzdem noch falsch. Selbst mit der neuen std bekomme ich falsche Ergebnisse. |
AW: Wolfgang Ehrhardts CRC/Hash Routinen - kompilieren schlägt fehl - IDE-Bug?
Ein letzter Versuch: Wenn Deine Funktion immernoch etwa so aussieht
Delphi-Quellcode:
hast Du wahrscheinlich ein Problem mit Unicodestrings wegen des pChar(s). Da char 16 Bit ist, müßtest Du auf jeden Fall length(s)*sizeof(char) verwenden. Doch ich bezweifele, daß Du überhaupt die vielen 0-Bytes eines Unicodestring haschen willst. Warum verwendest Du immer noch die dämlichen unangemessenen Strings? Gehascht werden sollte über Byte/Bit-Folgen, wie man es Dir in Deinem anderen Thread bereits nahegelegt hat.
function SHA1Text(const s: string): string;
var Context: THashContext; SHA256Digest: Hash.TSHA256Digest; begin SHA256.SHA256Init(Context); SHA256.SHA256Update(Context, pChar(s), length(s)); SHA256.SHA256Final(Context, SHA256Digest); Result := Mem_Util.HexStr(@SHA256Digest, SizeOf(SHA256Digest)); end; Gute Nacht Gammatester |
AW: Wolfgang Ehrhardts CRC/Hash Routinen - kompilieren schlägt fehl - IDE-Bug?
Zitat:
a) ich weiß nicht wie (unkomplizierte Lösung) b) habe ich den Code da oben bei StackOverflow gefunden und c) wenn ich den Hash anzeigen möchte, dann geht das halt nur über Strings. Ist jetzt aber auch egal das Thema hat sich für mich erledigt. |
AW: Wolfgang Ehrhardts CRC/Hash Routinen - kompilieren schlägt fehl - IDE-Bug?
Zitat:
Es geht ja nicht um die Ausgabe sondern die Eingabe. Der Code wäre halbwegs richtig für Delphi < 12, also prä- D2009 (allgemein, wenn string ein ansistring ist). Wenn Du keine abstrusen Zeichen benutzt, versuche also die Deklaration
Delphi-Quellcode:
function SHA1Text(const s: ansistring): ansistring;
|
AW: Wolfgang Ehrhardts CRC/Hash Routinen - kompilieren schlägt fehl - IDE-Bug?
[edit]
Ich seh grade, dass sich dieses Thema eh endgültig "erledigt" hat. Na gut, alles Wichtige wurde ja gesagt, also Punkt und Ende. [/edit]
Delphi-Quellcode:
wäre in so weit richtig, wenn der Code die selben Ergebnisse liefern soll, wie vor Delphi 2009.
function SHA1Text(const s: ansistring): ansistring;
Das Result wäre natürlich egal, da Hexadezimal als ASCII überall gleich aussieht, also wäre IMHO String dafür ganz passend. So wäre der Code halbwegs kompatibel zu Hashs, die vor D2009 generiert wurden. Allerdings ist AnsiString als Eingang auch nicht sonderlich optimal, da es bei Nicht-ASCII-Inputs je nach CodePage (Systemstpache) unterschiedliche Ergebnisse liefern kann wird. Fazit: Entweder man legt fest, dass eine bestimmte CodePage als Eingang vorgeschrieben ist, z.B. Latin1.
Delphi-Quellcode:
Oder man legt es besser noch auf einen Unicode-Zeichensatz fest, wie z.B. Unicode (UnicodeString, bzw. auch WideString für vor Delphi 2009) oder besser UTF8String.
type
Latin1 = type AnsiString(1252); // ISO 8859-1 function SHA1Text(const S: Latin1): String;
Delphi-Quellcode:
(seit Delphi 2009 kümmert sich Windows automatisch um eine Konvertierung, wenn man da einen String oder AnsiString rein gibt.
function SHA1Text(const S: UTF8String): String;
Nur so ist gewährleistet, dass Hashs immer und überall gleich sind. Blos zu Hashs der alten ANSI-Version ist es nicht kompatibel. |
AW: Wolfgang Ehrhardts CRC/Hash Routinen - kompilieren schlägt fehl - IDE-Bug?
Da Du Dir mit strings/Char immer irgendwelche Unwägbarkeiten einhandelst sollte man, zumindest offizell die Finger davon lassen. Sollte der der String als bequeme Datenstruktur genutzt werden, muß man immer im Hinterkopf behalten, daß man sich da Nebeneffekte einhandeln kann (x00 z.B.)
Das ist nichts für Anfänger und Schusselsköppe, darum meide ich solche Tricks wie der Teufel das Weihwasser. Gruß K-H |
AW: Wolfgang Ehrhardts CRC/Hash Routinen - kompilieren schlägt fehl - IDE-Bug?
Info: Der Bug ist gefixt in Embarcadero® Delphi 10.2 Version 25.0.26309.314, vgl.
![]() Selbst getestet. Gruß Gammatester |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz