eine erste Rückmeldung und Frage zur CRC Funktion:
das übergebene Funktionsargument
pin
ist nach meinem Verständnis ein Byte.
Es wird im Folgenden als Pointer auf das erste Zeichen der zu behandelnden Zeichenkette mit Länge
len
(2. Argument) verwendet.
Ich habe dies gefunden:
http://delphibasics.co.uk/RTL.php?Name=PAnsiChar
Um die CRC Funktion aufzurufen, verwende ich zum Test folgende Funktion:
Delphi-Quellcode:
function ErzeugeSolarisCRCWord(Text: string): word;
var
tmpAnsiString: AnsiString;
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 := Text;
i := 1;
tmpPAnsiString := Addr(tmpAnsiString);
tmpPAnsiChar := Addr(tmpAnsiString[i]);
tmpLength := Length(tmpAnsiString);
// CRC berechnen
// function cal_crc_half(pin: PByte; len: Byte): Word;
result := cal_crc_half(Addr(tmpPAnsiChar), tmpLength);
end;
Lasse ich das mit Text = 'QPIGS' laufen und setzte einen Haltepunkt vor dem Aufruf von cal_crc_half, habe ich folgende Werte:
Delphi-Quellcode:
tmpPAnsiString = $12FBD8
tmpPAnsiChar = 'QPIGS'
tmpLength := 5
Addr(tmpPAnsiChar) = $12FBD0
In der Funkton cal_crc_half ist nach der Zuweisung
ptr := pin;
der Wert von
Meinem bisherigen Verständnis nach sollte jedoch der derefernierte Wert von
ptr
ASCII-Wert des ersten Buchstaben von
Text
bzw. von
tmpPAnsiChar
sein - also "Q =
ASCII 81".
ptr^
liefert jedoch 12.
Ich verstehe das nicht, wahrscheinlich weil ich das Thema Pointer, AnsiChar und AnsiString nicht durchblickt habe.
Kann mir jemand helfen?