na hoffentlich dauert das nicht zu lange *gg
irgendwo steckt allerdings noch der wurm drin,
die funktion schaut bei mir nun so aus:
Code:
function calccrc(strng: string): integer;
var
crc, ch, i, j: integer;
begin
CRC := 0;
for i := 1 to Length(Strng)-1 do
begin
ch := Ord(strng[i]);
//hier hab ich geprüft ob ch und crc die richtigen werte haben
//für ch ist das der fall, crc liefert allerdings andere werte
for j := 0 to 7 do
begin
if ((crc Xor ch) And 1) <> 0 Then
crc:= (Trunc(crc /2) Xor 40961)
else
crc:= Trunc(crc /2);
ch:= Trunc(crc /2);
end;
end;
result:= crc;
end;
showmessage(intToStr(calccrc('123'))); müßte eigentlich
den wert 17812 liefern, erhalten tu ich aber 47105
meine funktionierende php lösung sah damals so aus:
Code:
$packetlen = strlen($packet)-1;
for ($i=$packetlen; $i > 0; $i--) {
$ch = ord(substr($packet, $h++, 1));
for($j=0; $j <= 7; $j++) {
if (($crc ^ $ch) & 1) {
$crc = ($crc / 2) ^ 40961;
} else {
$crc = $crc / 2;
}
$ch = $ch / 2;
}
}
return $crc;
allerdings hatte ich auch hier ewig mit der
inneren for schleife gekämpft bis ich letztendlich
den richtigen wert zurückgegeben bekommen habe