Einzelnen Beitrag anzeigen

Zer0ne

Registriert seit: 9. Apr 2018
6 Beiträge
 
#1

CRC16 Problem mit Input ASCII/Hex

  Alt 9. Apr 2018, 14:49
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

Geändert von Zer0ne ( 9. Apr 2018 um 14:56 Uhr)
  Mit Zitat antworten Zitat