![]() |
vb function zu delphi konvertieren
hallo =),
ich möchte gerne eine vb funktion zu delphi konvertieren und bekomm nun allerdings ständig fehlermeldungen vom compiler mit denen ich nichts anfangen kann
Code:
in der zeile: "ch:= Ord(Copy(strng, i +1, 1));" heißt
function calccrc(strng: string; lenstr: integer): integer;
var crc, ch, i, j: integer; begin for i:= 0 to lenstr -1 do ch:= Ord(Copy(strng, i +1, 1)); for j:= 0 to 7 do if ((crc Xor ch) And 1) Then crc:= (int((crc /2)) Xor 40961) else crc:= Int(crc / 2); end; ch:= Int(ch / 2); end; end; result:= crc; end; es z.b. inkompatible typen in "if ((crc Xor ch) And 1) Then" Ausdruck muss Boolean sein crc:= (int((crc /2)) Xor 40961) Operation ist auf Operantentyp nicht anwendbar crc:= Int(crc / 2); inkompatible typen Integer und extented usw. hat jemand beim überfliegen meines versuches in delphi vielleicht ein paar gundsetzliche fehler gefunden? die orginal funktion:
Code:
Function CALCCRC(strng$, lenstr)
Dim crc As Long Dim ch As Long Dim i As Long Dim j As Long For i = 0 To lenstr - 1 ch = Asc(Mid(strng$, i + 1, 1)) For j = 0 To 7 If ((crc Xor ch) And 1) Then crc = (Int((crc / 2)) Xor 40961) Else crc = Int(crc / 2) End If ch = Int(ch / 2) Next j Next i CALCCRC = crc End Function |
Re: vb function zu delphi konvertieren
Code:
Das sollte es sein ;)
function calccrc(strng: string[color=#ff0009][s]; lenstr: integer[/s][/color]): integer;
var crc, ch, i, j: integer; begin [color=#ff0009]CRC := 0;[/color] for i := [color=#ff0009]1 to Length(Strng)[/color] do ch := [color=#ff0009]Ord(strng[I]);[/color] for j := 0 to 7 do if ((crc Xor ch) And 1)[color=#ff0009] <> 0[/color] Then crc:= ([color=#ff0009]Trunc(crc /2)[/color] Xor 40961) else crc:= [color=#ff0009]Trunc(crc /2)[/color]; end; ch:= [color=#ff0009]Trunc(crc /2)[/color]; end; end; result:= crc; end; ...:cat:... |
Re: vb function zu delphi konvertieren
oh das ging aber schnell, dankeschön =)
und es scheint auch schon fast zu funktionieren *gg* aber in der zeile "ch:= Trunc(crc /2);" meckert der compiler noch einmal: "Dekleration erwartet, aber Bezeichner 'ch' gefunden" Ich denke mal das das end if auf der vb funktion noch nicht richtig umgesetzt ist |
Re: vb function zu delphi konvertieren
Ich sehe gerade, daß Dir die Pascal-Syntax noch gar nicht liegt, da fehlen ein paar begins
Code:
:!: Beachte das durchgestrichene Semikolon nach der Else-Anweisung ;)
function calccrc(strng: string): integer;
var crc, ch, i, j: integer; begin CRC := 0; for i := 1 to Length(Strng) do [color=#ff0000]begin[/color] ch := Ord(strng[I]); for j := 0 to 7 do [color=#ff0000]begin[/color] if ((crc Xor ch) And 1) <> 0 Then crc:= (Trunc(crc /2) Xor 40961) else crc:= Trunc(crc /2)[s][color=#ff0000];[/color][/s] end; ch:= Trunc(crc /2); end; end; result:= crc; end; ...:cat:... |
Re: vb function zu delphi konvertieren
nun meckert er nur noch an der Stelle
"result:= crc;" und meint "Deklaration erwartet, aber Bezeichner 'result' gefunden" :gruebel: |
Re: vb function zu delphi konvertieren
Args, die VBler :wall:
Okay, kurzer Exkurs in die If-Then-Else Welt von Pascal ;) In der Regeln geht mit jedem END ein BEGIN (es gibt wenige Ausnahmen). Du hast getippt:
Delphi-Quellcode:
Hier hast Du ein END ohne BEGIN. Es gibt zwei Möglichkeiten. Da Du nur eine Anweisung je Zweig hast, lasse die BEGIN-END Blöcke weg (heutzutage manchmal abwertend beurteilt)
if ..... then
Anweisung else Anweisung end;
Delphi-Quellcode:
oder Du schreibst schöne Blöcke. Ist imho besser zu lesen.
if .... then
Anweisung else Anweisung;
Delphi-Quellcode:
...:cat:...
if .... then
BEGIN Anweisung(en); END else BEGIN Anweisung(en); END; |
Re: vb function zu delphi konvertieren
dann hast du vor dem result := crc ein end; zuviel.
vermutlich genau an der stelle wo sakura dein ; durchgestrichen hat und nen end hingeklemmt hat :wink: <edit> oh das end war ja schon da. Also dein fehler, aber mit Sakuras if-then lektion bekommste das schon hin 8) <edit> |
Re: vb function zu delphi konvertieren
Zitat:
|
Re: vb function zu delphi konvertieren
verdammt, zulangsam gewesen :stupid:
|
Re: vb function zu delphi konvertieren
Man seid ihr alle fix :roll: :mrgreen:
...:cat:... |
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 |
Re: vb function zu delphi konvertieren
Zitat:
Zitat:
...:cat:... |
Re: vb function zu delphi konvertieren
Zitat:
Delphi-Quellcode:
PS: FPU = floating processing unit = Flieskomma-Prozessor, könnte man auch zu den Akronymen aufnehmen
crc:= crc div 2;
// alternativ kann man auch um ein Bit nach rechts schieben crc := crc shr 1; |
Re: vb function zu delphi konvertieren
Zitat:
...:cat:... |
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) |
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: |
Re: vb function zu delphi konvertieren
du bist soooo fies *gg*
also nocheinmal sehr vielen lieben Dank für die Hilfe =)) |
Re: vb function zu delphi konvertieren
Zitat:
...:cat:... |
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:
showmessage(intToStr(calccrc('123'))); müßte eigentlich
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; den wert 17812 liefern, erhalten tu ich aber 47105 meine funktionierende php lösung sah damals so aus:
Code:
allerdings hatte ich auch hier ewig mit der
$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; inneren for schleife gekämpft bis ich letztendlich den richtigen wert zurückgegeben bekommen habe |
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:
...:cat:...
$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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:41 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