Registriert seit: 3. Apr 2007
Ort: Zürich
533 Beiträge
Delphi 11 Alexandria
|
AW: CRC von C in Delphi übersetze
23. Mär 2023, 16:10
Ich habe mir den Spass erlaubt den Bing Bot in Skype zu fragen. Er sagt Sure, here is the Delphi version of the code:
Delphi-Quellcode:
function cal_crc_half(pin: PByte; len: Byte): Word;
var
crc: Word;
da: Byte;
ptr: PByte;
bCRCHign: Byte;
bCRCLow: Byte;
crc_ta: array[0..15] of Word = ($0000, $1021, $2042, $3063, $4084, $50a5, $60c6, $70e7,
$8108, $9129, $a14a, $b16b, $c18c, $d1ad, $e1ce, $f1ef);
begin
ptr := pin;
crc := 0;
len := len - 1;
while (len <> 0) do
begin
da := (crc shr 8) shr 4; // CRC high four bits
crc := crc shl 4; // The CRC is shifted to the right by 4 bits, which is equivalent to taking the lower 12 bits of the CRC.
crc := crc xor crc_ta[da xor (ptr^ shr 4)]; // Add the upper 4 bits of the CRC and the first half of the byte and look up the table to calculate the CRC, then add the remainder of the last CRC.
da := (crc shr 8) shr 4; // CRC high four bits
crc := crc shl 4; // The CRC is shifted to the right by 4 bits, which is equivalent to taking the lower 12 bits of the CRC.
crc := crc xor crc_ta[da xor (ptr^ and $0f)]; // Add the upper 4 bits of the CRC and the last half of the byte and look up the table to calculate the CRC, then add the remainder of the last CRC.
Inc(ptr);
Dec(len);
end;
bCRCLow := crc and $FF;
bCRCHign := crc shr 8;
if (bCRCLow = $28) or (bCRCLow = $0d) or (bCRCLow = $0a) then
Inc(bCRCLow);
if (bCRCHign = $28) or (bCRCHign = $0d) or (bCRCHign = $0a) then
Inc(bCRCHign);
crc := (bCRCHign shl 8) + bCRCLow;
Result := crc;
end;
Am Schluss noch: I hope this helps! Let me know if you have any other questions.
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
Geändert von taveuni (23. Mär 2023 um 16:14 Uhr)
Grund: formatiert
|
|
Zitat
|