![]() |
VB Code zu Delphi - Probleme mit Bytearray
Hi Zusammen,
kann mir jemand folgendes in Delphi umcoden? Unter VB läuft das Problemlos. Hab schon alles mögliche unter Delphi probiert komm aber nicht richtig klar mit dem Bytearray in Delphi. :wall:
Delphi-Quellcode:
Wär echt cool wenn das jemand übernehmen könnte - damit ich mal ein Beispiel habe.
Public Sub crc()
Dim mask, j, n, crc As Integer Dim bt(24) As Byte Dim crct As String z = 0 crc = -1 ' crc mit $ffff initalisieren For n = 1 To Len(TextBox1.Text) Step 2 j = Mid(TextBox1.Text, n, 2) 'je 2 Zeichen filtern z = z + 1 'Zaehler für Bytearray bt(z) = CByte("&H" & j) crc = crc Xor bt(z) For j = 1 To 8 mask = 0 If crc / 2 <> Int(crc / 2) Then mask = &HA001 crc = Int(crc / 2) And &H7FFF: crc = crc Xor mask Next j Next n TextBox2.Text = crc ' crc anzeigen End Sub |
Re: VB Code zu Delphi - Probleme mit Bytearray
Ganz blöd würde ich sagen, das ist ein Array[1..24] of byte. Ohne Gewähr!
|
Re: VB Code zu Delphi - Probleme mit Bytearray
Erstmal danke DeddyH für deine Antwort.
Ja, das mit dem Array hab ich auch schon probiert, nur das Problem ist, dass ich wie im VB Besipiel 2 Zeichen in 1 Byte quetschen muss. Ich weiss nicht wie es VB intern funktioniert, weil ja die Typkonvertierung der Variablen dort autom. geschieht - auf jedenfalls geht es dort. Nur wenn ich das Ganze in Delphi umschreiben möchte, dann bringt er mir einen Fehler. Anbei mal mein Delphi Code:
Delphi-Quellcode:
Ich weiss es hört sich komisch an mit 2 Zeichen in einem Byte, aber in VB funktionierts.
procedure ByteCrc(data:byte;var crc:word);
var i:BYTE; Begin for i:=0 to 7 do begin if (( data and $01) xor ( crc and $0001) <> 0 ) then begin crc:=crc shr 1; //1 Pos nach rechts schieben crc:=crc xor $A001; end else crc:=crc shr 1; data:=data shr 1; end; end; function StringCrc(s:shortstring):word; var len,i:integer; begin result:=0; len:=length(s); for i:=1 to len do if i mod 2 = 0 then //alle 2 Zeichen ByteCrc(ord(s[i]),result); // CRC Byteweise bilden << Hier sollten 2 Zeichen als Byte der Prozedur ByteCRC übergeben werden. end; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var s:shortstring; h:word; begin s:=edit1.Text; h:=StringCrc(s); Edit2.Text:=IntToHex(h,4); end; Vielleicht weisst jemand weiter. |
Re: VB Code zu Delphi - Probleme mit Bytearray
Herzlich willkommen in der Delphi-PRAXiS, mrhyde.
Ich würde den VB-Code nicht direkt übersetzen. Was du benötigst ist eine Funktion zur Polynomdivision und eine Funktion zur Wandlung von Hex-Code in Bytes. Vielleicht interessiert dich dieser Thread: ![]() Freundliche Grüße auch an drjekyll |
Re: VB Code zu Delphi - Probleme mit Bytearray
Irgendwie komm ich da nicht recht klar damit,
habe etwas mit den Besipielen herumgespielt und es jedoch nicht geschafft aus 00057E0440404040 den CRC: F1CA zu erlangen. |
Re: VB Code zu Delphi - Probleme mit Bytearray
Hallo,
mit den CRC-Werten ist das so eine Sache - es gibt ein paar Freiheitsgrade, wie z.B. die Initialisierung des Schieberegisters und die Invertierung des Ergebnisses. Die Kenntnis des Polynoms reicht einfach nicht aus. Du hast wahrscheinlich den negierten Wert 0E35 erhalten. So wirst du dann glücklich:
Delphi-Quellcode:
Freundliche Grüße
ShowMessage(IntToHex(ModbusCRC16(s, $FFFF), 4));
|
Re: VB Code zu Delphi - Probleme mit Bytearray
Hey marabu du bist der Beste ;-)
Hab das 'not' übersehen - thx hast mir sehr geholfen! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07: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