Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Visual Basic zu Delphi (https://www.delphipraxis.net/212529-visual-basic-zu-delphi.html)

skoschke 23. Feb 2023 09:53

Visual Basic zu Delphi
 
Hallo,

ich will eine procedure aus einem Visual Basic Projekt nach Delphi umsetzen, aber diese zeile kann ich nicht interpretieren...
Kann mir bitte jemand weiterhelfen?

Delphi-Quellcode:
procedure addCrc16(var crc: Integer; ch: Char);
const
  crc16tab: array [0 .. 255] of Integer = ($0, $1189, $2312, $329B, $4624,
    $57AD, $6536, $74BF, $8C48, $9DC1, $AF5A, $BED3, $CA6C, $DBE5, $E97E, $F8F7,
    $1081, $108, $3393, $221A, $56A5, $472C, $75B7, $643E, $9CC9, $8D40, $BFDB,
    $AE52, $DAED, $CB64, $F9FF, $E876, $2102, $308B, $210, $1399, $6726, $76AF,
    $4434, $55BD, $AD4A, $BCC3, $8E58, $9FD1, $EB6E, $FAE7, $C87C, $D9F5, $3183,
    $200A, $1291, $318, $77A7, $662E, $54B5, $453C, $BDCB, $AC42, $9ED9, $8F50,
    $FBEF, $EA66, $D8FD, $C974, $4204, $538D, $6116, $709F, $420, $15A9, $2732,
    $36BB, $CE4C, $DFC5, $ED5E, $FCD7, $8868, $99E1, $AB7A, $BAF3, $5285, $430C,
    $7197, $601E, $14A1, $528, $37B3, $263A, $DECD, $CF44, $FDDF, $EC56, $98E9,
    $8960, $BBFB, $AA72, $6306, $728F, $4014, $519D, $2522, $34AB, $630, $17B9,
    $EF4E, $FEC7, $CC5C, $DDD5, $A96A, $B8E3, $8A78, $9BF1, $7387, $620E, $5095,
    $411C, $35A3, $242A, $16B1, $738, $FFCF, $EE46, $DCDD, $CD54, $B9EB, $A862,
    $9AF9, $8B70, $8408, $9581, $A71A, $B693, $C22C, $D3A5, $E13E, $F0B7, $840,
    $19C9, $2B52, $3ADB, $4E64, $5FED, $6D76, $7CFF, $9489, $8500, $B79B, $A612,
    $D2AD, $C324, $F1BF, $E036, $18C1, $948, $3BD3, $2A5A, $5EE5, $4F6C, $7DF7,
    $6C7E, $A50A, $B483, $8618, $9791, $E32E, $F2A7, $C03C, $D1B5, $2942, $38CB,
    $A50, $1BD9, $6F66, $7EEF, $4C74, $5DFD, $B58B, $A402, $9699, $8710, $F3AF,
    $E226, $D0BD, $C134, $39C3, $284A, $1AD1, $B58, $7FE7, $6E6E, $5CF5, $4D7C,
    $C60C, $D785, $E51E, $F497, $8028, $91A1, $A33A, $B2B3, $4A44, $5BCD, $6956,
    $78DF, $C60, $1DE9, $2F72, $3EFB, $D68D, $C704, $F59F, $E416, $90A9, $8120,
    $B3BB, $A232, $5AC5, $4B4C, $79D7, $685E, $1CE1, $D68, $3FF3, $2E7A, $E70E,
    $F687, $C41C, $D595, $A12A, $B0A3, $8238, $93B1, $6B46, $7ACF, $4854, $59DD,
    $2D62, $3CEB, $E70, $1FF9, $F78F, $E606, $D49D, $C514, $B1AB, $A022, $92B9,
    $8330, $7BC7, $6A4E, $58D5, $495C, $3DE3, $2C6A, $1EF1, $F78);

begin
  crc := (crc >> 8) Xor crc16tab((crc Xor CByte(Asc(ch))) And &HFF) ; <----- das hier kann ich nicht umsetzen!
end;
Danke
Ciao
Stefan

DeddyH 23. Feb 2023 10:00

AW: Visual Basic zu Delphi
 
>> = shr und &HFF dürfte $FF sein.

Phoenix 23. Feb 2023 12:56

AW: Visual Basic zu Delphi
 
Mal ChatGPT gefragt:

Zitat:

Zitat von Phoenix
This code block is visual basic:

begin
crc := (crc >> 8) Xor crc16tab((crc Xor CByte(Asc(ch))) And &HFF);
end;

Please translate this to Delphi code.

Zitat:

Zitat von ChatGPT
Sure! Here is the equivalent Delphi code for the provided Visual Basic code block:
Code:
crc := (crc shr 8) xor crc16tab[(crc xor Byte(Ord(ch))) and $FF];
Assuming crc is a 16-bit unsigned integer variable, and crc16tab is an array of 256 16-bit unsigned integers.

Note that shr is the Delphi equivalent of the >> right-shift operator in Visual Basic. Byte(Ord(ch)) is used to convert the ASCII character ch to a byte value, which is required by the crc16tab array. The $FF hexadecimal value is used to perform a bitwise AND operation with the byte value, ensuring that only the lower 8 bits are used in the computation.

Irgendwie cool. Und erschreckend. Ich habe ihm die Tabelle ja nicht mitgegeben, aber das Ding "rät" das es die Tabelle sein muss.

himitsu 23. Feb 2023 13:19

AW: Visual Basic zu Delphi
 
crc16tab hätte dann aber auch eine Funkltion sein können,
denn dann wäre die ( richtig gewesen. :stupid:

Das ist ein CRC16.
Warum ist das dann ein Integer und kein Word?

Und sicherheitshalber hier ein AnsiChar benutzen, denn bei Unicode knallt es sonst schnell mal stimmt das Ergebnis nicht.
[edit] AND übersehn, wobei man stattdessen auch einfach nach Byte casten könnte und der innere Cast optimiert sich dann weg.

himitsu 23. Feb 2023 13:20

AW: Visual Basic zu Delphi
 
[deleted]

TurboMagic 23. Feb 2023 16:52

AW: Visual Basic zu Delphi
 
Warum nicht eine der vielen bereits vorhandenen CRC16 Implementierungen für Delphi benutzen?
z. B. https://github.com/MHumm/DelphiEncryptionCompendium
enthält auch welche in https://github.com/MHumm/DelphiEncry...rce/DECCRC.pas

Grüße
TurboMagic

dummzeuch 23. Feb 2023 17:15

AW: Visual Basic zu Delphi
 
Zitat:

Zitat von TurboMagic (Beitrag 1519035)
Warum nicht eine der vielen bereits vorhandenen CRC16 Implementierungen für Delphi benutzen?
z. B. https://github.com/MHumm/DelphiEncryptionCompendium
enthält auch welche in https://github.com/MHumm/DelphiEncry...rce/DECCRC.pas

Das setzt voraus, dass die Berechnung in VB korrekt ist.
Aber gut, könnte man ja, wenn man Testdaten hat, ausprobieren.

(Ich hatte das schon mehrfach, dass jemand eine angebliche Standard-Funktion in VB programmiert hat, und dabei die Umsetzung verhauen hatte ohne es zu merken. Da es um den Zugriff auf in VB erzeugte Daten ging, musste ich die fehlerhafte Funktion dann in Delphi nachprogrammieren. :cry:)

himitsu 23. Feb 2023 17:32

AW: Visual Basic zu Delphi
 
Joar, die Berechnungsweise ist ja meistens die Selbe.
Man braucht dann nur noch rauszufinden wie Polynomial/InitialVector und Finalization aussehen, womit da gerechnet wird.

OK, solche Probleme nicht inbegriffen.
Wir wissen auch nicht, wie VB vorher aussah, aber der Integer liefert hier garantiert (bei mehr als 2 Durchläufen) ein "falsches" Ergebnis ... 16 Bit zu viel. :stupid:

skoschke 24. Feb 2023 07:10

AW: Visual Basic zu Delphi
 
Vielen herzlichen Dank!

Ciao
Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:19 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