Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi vb function zu delphi konvertieren (https://www.delphipraxis.net/25039-vbulletin-function-zu-delphi-konvertieren.html)

endeffects 30. Jun 2004 10:42

Re: vb function zu delphi konvertieren
 
also ich hab die schleifen nu schon mehrmals durchgezählt
da ist meines dafürhaltens kein end; zu viel *gg

ich hab vorher halt überwiegend mit php gearbeitet,
da mußte man auf solche dinge keine rücksicht nehmen

tut mir leid sakura *gg*, das ist erst mein 5ter Tag mit Delphi

sakura 30. Jun 2004 10:44

Re: vb function zu delphi konvertieren
 
Zitat:

Zitat von endeffects
also ich hab die schleifen nu schon mehrmals durchgezählt
da ist meines dafürhaltens kein end; zu viel *gg

Es sind nicht die Schleifen, es ist Dein if-then-else-end; ;) Siehe Generalissimos Code ;)

Zitat:

Zitat von endeffects
tut mir leid sakura *gg*, das ist erst mein 5ter Tag mit Delphi

Herzlich willkommen im Mekka der Programmierer :dp:

...:cat:...

shmia 30. Jun 2004 10:45

Re: vb function zu delphi konvertieren
 
Zitat:

Zitat von sakura
Delphi-Quellcode:
crc:= Trunc(crc /2);

Noch eine kleine Optimierung (statt die FPU zu bemühen, kann man auch Integerarithmetik verwenden): :zwinker:
Delphi-Quellcode:
crc:= crc div 2;
// alternativ kann man auch um ein Bit nach rechts schieben
crc := crc shr 1;
PS: FPU = floating processing unit = Flieskomma-Prozessor, könnte man auch zu den Akronymen aufnehmen

sakura 30. Jun 2004 10:47

Re: vb function zu delphi konvertieren
 
Zitat:

Zitat von shmia
Noch eine kleine Optimierung (statt die FPU zu bemühen, kann man auch Integerarithmetik verwenden): :zwinker:

Stimmt, aber zu meiner Verteidigung muss ich sagen, daß der VB-Code auch auf Real-Division (/) und nicht auf Integer-Division (\) basierte :mrgreen: Und wir wollten den Code ja korrekt übersetzen und keine Vermutungen starten :zwinker:

...:cat:...

endeffects 30. Jun 2004 10:55

Re: vb function zu delphi konvertieren
 
ihr seid einfach viel zu schnell *gg*,
also ersteinmal danke euch allen für die
rasche hilfe, an der funktion selbst meckert
der compiler nun auf jeden fall nicht mehr *gg*

wenn ich allerdings mit showmessage(calccrc('123456)');
über ein onclick verfahren die funktion aufrufe
dann heißt es an dieser stelle inkompatible typen:
'string' und 'integer', aber: calccrc(strng: string):integer;
übergeben wird doch strng als string und ausgegeben
werden soll eine integer zahl (crc die als solche definiert ist)

Smokey 30. Jun 2004 11:07

Re: vb function zu delphi konvertieren
 
eben.
Deine funktion liefert nen Integer zurück und Showmessage erwartet nen String.
Also musst du dein Resultat von integer nach String konvertieren (mit intToStr() )

Die gemütlichen php Zeiten bei denen Datentypen relativ egal waren sind nun vorbei :twisted:

endeffects 30. Jun 2004 11:13

Re: vb function zu delphi konvertieren
 
du bist soooo fies *gg*

also nocheinmal sehr vielen lieben Dank für die Hilfe =))

sakura 30. Jun 2004 11:31

Re: vb function zu delphi konvertieren
 
Zitat:

Zitat von Smokey
Die gemütlichen php Zeiten bei denen Datentypen relativ egal waren sind nun vorbei :twisted:

Warte noch ein bisschen, und Du wirst Dich aufregen, daß andere Sprache so schlampig (nicht flexibel :!:) sind, was es die Datentypenbehandlung betrifft.

...:cat:...

endeffects 30. Jun 2004 12:12

Re: vb function zu delphi konvertieren
 
na hoffentlich dauert das nicht zu lange *gg

irgendwo steckt allerdings noch der wurm drin,
die funktion schaut bei mir nun so aus:

Code:
function calccrc(strng: string): integer;
var
  crc, ch, i, j: integer;
begin
  CRC := 0;
  for i := 1 to Length(Strng)-1 do
  begin
    ch := Ord(strng[i]);
//hier hab ich geprüft ob ch und crc die richtigen werte haben
//für ch ist das der fall, crc liefert allerdings andere werte
    for j := 0 to 7 do
    begin
      if ((crc Xor ch) And 1) <> 0 Then
        crc:= (Trunc(crc /2) Xor 40961)
      else
        crc:= Trunc(crc /2);
      ch:= Trunc(crc /2);
    end;
  end;
  result:= crc;
end;
showmessage(intToStr(calccrc('123'))); müßte eigentlich
den wert 17812 liefern, erhalten tu ich aber 47105
meine funktionierende php lösung sah damals so aus:

Code:
   $packetlen = strlen($packet)-1;
   for ($i=$packetlen; $i > 0; $i--) {
      $ch = ord(substr($packet, $h++, 1));
      for($j=0; $j <= 7; $j++) {
         if (($crc ^ $ch) & 1) {
            $crc = ($crc / 2) ^ 40961;
         } else {
            $crc = $crc / 2;
         } 
         $ch = $ch / 2;
      }
   }
   
   return $crc;
allerdings hatte ich auch hier ewig mit der
inneren for schleife gekämpft bis ich letztendlich
den richtigen wert zurückgegeben bekommen habe

sakura 30. Jun 2004 12:17

Re: vb function zu delphi konvertieren
 
Der Unterschied:

Code:
function calccrc(strng: string): integer;
var
  crc, ch, i, j: integer;
begin
  CRC := 0;
  for i := 1 to Length(Strng)-1 do
  begin
    ch := Ord(strng[i]);
//hier hab ich geprüft ob ch und crc die richtigen werte haben
//für ch ist das der fall, crc liefert allerdings andere werte
    for j := 0 to 7 do
    begin
      if ((crc Xor ch) And 1) <> 0 Then
        crc:= (Trunc(crc /2) Xor 40961)
      else
        crc:= Trunc(crc /2);
      ch:= Trunc([color=#ff0000]crc[/color] /2);
    end;
  end;
  result:= crc;
end;
Code:
   $packetlen = strlen($packet)-1;
   for ($i=$packetlen; $i > 0; $i--) {
      $ch = ord(substr($packet, $h++, 1));
      for($j=0; $j <= 7; $j++) {
         if (($crc ^ $ch) & 1) {
            $crc = ($crc / 2) ^ 40961;
         } else {
            $crc = $crc / 2;
         } 
         $ch = [color=#ff0000]$ch[/color] / 2;
      }
   }
   
   return $crc;
...:cat:...


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:18 Uhr.
Seite 2 von 2     12   

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