![]() |
C# zu Pas
Hallo :)
Nach langer Zeit bin auch mal wieder da und benötige gleich mal wieder eure Hilfe. Und zwar habe ich eine Funktion die in C# programmiert wurde und dich ich gerne in meiner Delphi-Anwendung benutzen möchte. Die Funktion in C#
Code:
Und hier ist das was ich bereits habe
internal static int HttpHash(string[] hashParams) {
int b = -1, i, j; uint a, c; if (hashParams.Length == 0) return -1; for (i = 0; i < hashParams.Length; i++) { for (j = 0; j < hashParams[i].Length; j++) { c = hashParams[i][j]; a = (uint)(c ^ b) + (c << 8); b = (int)(a >> 24) | (int)(a << 8); } } return System.Math.Abs(b); }
Delphi-Quellcode:
Ich hoffe, dass es soweit richtig ist und das jemand mir hilft den Rest auch noch zu übersetzen.
function HttpHash(HashParams: String): Integer;
var b, i, j, a, c: Integer; begin b := -1; if Length(HashParams) = 0 then begin Result := -1; Exit; end; for i := 0 to Length(HashParams) do begin // Hier komme ich nicht weiter... end; end; Vielen Dank schon einmal im voraus :) |
Re: C# zu Pas
hashparams ist kein String sondern ein Array aus strings
in der Schleife mit i gehst du das Array durch, in der Schleife mit j die einzelnen Strings |
Re: C# zu Pas
Wenn ich es richtig verstehe, müsste es so heißen:
Delphi-Quellcode:
function HttpHash(HashParams: array of string): Integer;
var b, i, j: Integer; a, c: cardinal; begin b := -1; if Length(HashParams) = 0 then begin Result := -1; Exit; end; for i := 0 to Length(HashParams) do begin for j := 1 to length(HashParams[i]) do begin c := ord(HashParams[i][j]); a := cardinal((c xor b) + (c shl 8)); b := integer((a shr 24) or integer((a shl 8))); end; end; result := abs(b); end; |
Re: C# zu Pas
Code:
< hashParams.Length entspricht eigentlich to Length(HashParams) - 1
for (i = 0; i < hashParams.Length; i++) {
(solange wie i kleiner Length) string[] scheint ein array of string zu sein und nicht nur string x ^ y = Power(x, y) x xor y << = shl >> = shr (int)(... >> ...) = int kannst'e in Delphi ignorieren bei der Schleife für j mußt'e aufassen, da der Delphi-String mit 1 beginnend intiziert wird. demnach alles um 1 größer, also for j := 1 to Length(hashParams[i].Length) do [add] daß hier auch alle gleich die Lösung verraten müssen ... da kann man ja nix mehr selber lösen :angel2: aber a und c würde ich als Integer definieren und das ganz Integer- bzw. Cardinal-Gekaste weglassen ... Delphi beachtet bei diesen Binäroperationen eh keine Vorzeichen. |
Re: C# zu Pas
Vielen Dank :)
Das ging ja echt schnell. Ich werde mir das jetzt mal genauer anschauen, um zu verstehen, wie die Umwandlung gemacht worden ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 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 by Thomas Breitkreuz