Einzelnen Beitrag anzeigen

ZOD

Registriert seit: 6. Mai 2009
97 Beiträge
 
#10

AW: CRC von C in Delphi übersetze

  Alt 24. Mär 2023, 12:19
weiter probiert und mit PByte() kann ich ohne Fehler kompilieren.
So sieht die Aufruffunktion jetzt aus:

Delphi-Quellcode:
function ErzeugeSolarisCRCWord(Text: string): word;
var
  tmpAnsiString: AnsiString;

  tmpPAnsiCharByte,
  tmpPAnsiString: PByte;
  tmpPAnsiChar: PAnsiChar;

  tmpLength: Byte;

  tmpTextLength,
    i : integer;

begin
  // initialisieren
  result := 0;
  tmpTextLength := Length(Text);

  // validieren
  if ((tmpTextLength = 0) or (tmpTextLength > 256)) then
    exit;

  // Merker setzen
  tmpAnsiString := Erzeuge8BitCharString(Text);
  i := 1;
  tmpPAnsiString := Addr(tmpAnsiString);
  tmpPAnsiChar := Addr(tmpAnsiString[i]);
  tmpLength := Length(tmpAnsiString);

  tmpPAnsiCharByte := PByte(tmpPAnsiChar);

  // CRC berechnen
  // function cal_crc_half(pin: PByte; len: Byte): Word;
  result := cal_crc_half(tmpPAnsiCharByte, tmpLength);

end;
Beim Test sind jetzt in function cal_crc_half(pin: PByte; len: Byte): Word; folgende Werte abrufbar (<STRG>+<F7>):

Delphi-Quellcode:
  ptr = $B7980C
  ptr^ = 81
  Char(ptr^) = 'Q'
Ok, soweit läuft das also.

Leider bin ich nun zurück bei meinem Ausgangsproblem - der CRC Berechnung.

Ich erhalte als CRC Wert $D2$36

Laut der Doku der CRC-C-Routine sollte jedoch der CRC für "QPIGS" den Wert $B7$A9 lauten.

Also ist entweder

A - die "Übersetzung C->Delphi" nicht korrekt
B - die Doku falsch
C - oder ich mache noch einen völlig anderen Fehler

Tipps und Hinweise sind ausdrücklich willkommen!
  Mit Zitat antworten Zitat