(一)
function UpdateCrc16(Value: Byte; Crc16: Word): Word;
begin
Result := ((Crc16 shr 8) and $00FF) xor
crc16tab[Byte(Crc16 xor (Word(Value)) and $00FF)];
end;function Crc16(const Value: string): Word;
var
n: Integer;
begin
Result := $FFFF;
for n := 1 to Length(Value) do
Result := UpdateCrc16(Ord(Value[n]), Result);
end;
========================================
(二)
s: string;
p: pointer;
buffer = ARRAY[1..65521] OF BYTE;
q: ^buffer;p:= addr(s);
q:=p;FOR i := 1 TO nBYTE DO
CRCvalue := Hi(CRCvalue) XOR Table[ ord(q^[i]) XOR Lo(CRCvalue) ]为什么两段代码生成CRC不一样啊,我用的都是查表,表都是一样的,就是结果不一样,请问怎么回事
function UpdateCrc16(Value: Byte; Crc16: Word): Word;
begin
Result := ((Crc16 shr 8) and $00FF) xor
crc16tab[Byte(Crc16 xor (Word(Value)) and $00FF)];
end;function Crc16(const Value: string): Word;
var
n: Integer;
begin
Result := $FFFF;
for n := 1 to Length(Value) do
Result := UpdateCrc16(Ord(Value[n]), Result);
end;
========================================
(二)
s: string;
p: pointer;
buffer = ARRAY[1..65521] OF BYTE;
q: ^buffer;p:= addr(s);
q:=p;FOR i := 1 TO nBYTE DO
CRCvalue := Hi(CRCvalue) XOR Table[ ord(q^[i]) XOR Lo(CRCvalue) ]为什么两段代码生成CRC不一样啊,我用的都是查表,表都是一样的,就是结果不一样,请问怎么回事
Var
CRC : Word;
Index1,
Index2 : Byte;
begin
CRC := $FFFF;
For Index1 := 0 to iStrLen - 1 do
begin
Index2 := CRC xor byte((InString + Index1)^);
CRC := (CRC SHR 8) xor (CRC16table[Index2]);
end;
CRC16 := (CRC and $FFFF)
end;
//需要赋初值,为$FFFF;CRCvalue := $FFFF;FOR i := 1 TO nBYTE DO
CRCvalue := Hi(CRCvalue) XOR Table[ ord(q^[i]) XOR Lo(CRCvalue) ]
(二)
s: string;
p: pointer;
buffer = ARRAY[1..65521] OF BYTE;
q: ^buffer;p:= addr(s);
q:=p;FOR i := 1 TO nBYTE DO
CRCvalue := Hi(CRCvalue) XOR Table[ ord(q^[i]) XOR Lo(CRCvalue) ]
p: pointer;
buffer = ARRAY[1..65521] OF BYTE;
q: ^buffer;p:= addr(s);
q:=p;//需要赋初值,为$FFFF;CRCvalue := $FFFF;FOR i := 1 TO nBYTE DO
CRCvalue := Hi(CRCvalue) XOR Table[ ord(q^[i]) XOR Lo(CRCvalue) ]