Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - CRC Checksumme berechnen


CASS - Mo 12.12.05 15:05
Titel: CRC Checksumme berechnen
Hi Leute,

ich hoffe ich bin jetzt in der richtigen Kategorie gelandet ... *hoff*

Folgendes Problem:
Ich hab ein Beispiel zur Berechnung einer CRC Checksumme in Basic, diese muss ich jetzt auf Delphi umsetzten.
Leider will mir das nicht so ganz gelingen.

Hier der Basic Code:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
crc16& = 65535
FOR c% = 1 to LEN(message$)
crc16& = crc16& XOR ASC(MID$(message$, c%, 1))
FOR bit% = 1 to 8
IF crc16& MOD 2 THEN
crc16& = (crc16& \ 2) XOR 40961
ELSE
crc16& = crc16& \ 2
END IF
NEXT BIT%
NEXT c%
crch% = CRC16& \ 256: crcl% = CRC16& MOD 256
message$ = message$ + CHR$(crcl%) + CHR$(crch%)
CRC = CRC16&
END FUNCTION CRC


Und hier der Delphi Code den ich bis jetzt hab:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
function crc (command: string): string;
var
  Crc16, i, Bit: Integer;
  Crch, Crcl: Byte;
begin
  Crc16 := 65535;
  for i := 1 to Length(Command) do
  begin
    Crc16 := Crc16 XOR StrToInt(Command[i]);
    for Bit := 1 to 8 do
    begin
      if (Crc16 mod 2) = 1 then
      begin
        Crc16 := (Crc16 \ 2XOR 40961;
        end
      else
        Crc16 := Crc16 / 2;
      end;
    end;
  Crch := Crc16 / 256;
  Crcl := Crc16 MOD 256;
  Command = Command + Chr(Crcl) + Chr(Crch);

  Result := Command;
end;


Könnt ihr mir sagen für was das \ bei Basic steht? Und ob der rest so richtig umgesetzt ist.

Danke für jede Hilfe schon im Voraus,
Cass


Narses - Mo 12.12.05 15:53

Moin!

Suchst du: Suche in: Delphi-Forum, Delphi-Library CRC OR CRC16

cu
Narses


CASS - Mo 12.12.05 16:29

Ich denk nicht das es ein Standard CRC16 ist, kann ich aber leider auch nicht genau sagen. Aber die Sache muss ganz simpel sein. Ist zur Steuerung eines Thermometers.


CASS - Mo 12.12.05 17:38

Kann mir denn jemand erklären für was der \ bei der Basic Programmierung stehen soll?


alzaimar - Mo 12.12.05 17:49

Nee, vermutlich irgendwas mit shift, rotate oder so...
Aber hier, nimm das hier (falls Du es nicht für eine HA benötigst)


BenBE - Mo 12.12.05 18:09

In beiden Fällen ist ein simples DIV gemeint. Zumindest verarbeitet das QBasic so ...


alzaimar - Mo 12.12.05 18:13

VB ist doch echt das Beste! :mrgreen: