AGB  ·  Datenschutz  ·  Impressum  







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

C# zu Pas

Ein Thema von magoo2002de · begonnen am 23. Jul 2009 · letzter Beitrag vom 23. Jul 2009
Antwort Antwort
magoo2002de

Registriert seit: 26. Mär 2003
60 Beiträge
 
Delphi 2005 Personal
 
#1

C# zu Pas

  Alt 23. Jul 2009, 20:30
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:
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);
}
Und hier ist das was ich bereits habe
Delphi-Quellcode:
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;
Ich hoffe, dass es soweit richtig ist und das jemand mir hilft den Rest auch noch zu übersetzen.
Vielen Dank schon einmal im voraus
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: C# zu Pas

  Alt 23. Jul 2009, 20:38
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
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

Re: C# zu Pas

  Alt 23. Jul 2009, 20:38
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;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

Re: C# zu Pas

  Alt 23. Jul 2009, 20:43
Code:
for (i = 0; i < hashParams.Length; i++) {
< hashParams.Length entspricht eigentlich to Length(HashParams) - 1
(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

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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
magoo2002de

Registriert seit: 26. Mär 2003
60 Beiträge
 
Delphi 2005 Personal
 
#5

Re: C# zu Pas

  Alt 23. Jul 2009, 21:08
Vielen Dank
Das ging ja echt schnell.
Ich werde mir das jetzt mal genauer anschauen, um zu verstehen, wie die Umwandlung gemacht worden ist.
  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:18 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