Hallo zusammen,
ich habe noch nicht so viel Erfahrung mit programmierung und daher kommt die Frage/mein Problem hier vielleicht etwas trivial vor, aber ich beise mir daran schon länger die Zähne aus.
Ich soll für eine Kommunikation mit einem externen Gerät eine Checksumme mit CRC16 und dem Polynom $A001 berechnen.
Den CRC habe ich bereits implementiert für eine
ASCII Eingabe:
Code:
function CalcCRC(Command: String; var Value: Int32): Integer;
var i,j : Integer;
begin
Result := 0;
for i:=0 to Length(Command) do
begin
for j:=0 to 7 do
begin
if ((ord(Command[i]) and $01) XOR (Value And $0001) <> 0) then
Value := (Value shr 1) XOR $A001
else
Value := Value shr 1;
ord(Command[i]) := ord(Command[i]) shr 1;
end;
end;
end;
Aufrufen kann ich z.B. mit einer String Eingabe (Command):
Code:
command := '020D000A413068656C6C6F';
CalcCRC(command, crc);
Result := IntToHex(crc, 4);
Das Ergebnis, was ich hier erhalten ist 0xA3DA. Dies ist auch das richtige Ergebnis, auch mit der Berechnung diverser Calculatoren (z.B.
https://www.lammertbies.nl/comm/info...lculation.html). Jetzt will ich das ganze aber als Hex eingeben, da ich das Ergebnis 0xFD9C brauche.
Ich habe mir schon diverse Seiten und diverse Posts durchgelesen, aber irgendwie stehe ich hier komplett auf dem Schlauch, wie meine Eingabe für den CRC Algorithmus aussehen muss. Welche Anpassungen muss ich denn vornehmen?
Ich wäre für Hilfe / Tipps sehr dankbar.
Gruß
Zero