c语言的crc16算法 delphi 实现
做一个项目,其中有个一个CRC16算法,下面是之前的同事用C实现的
#define CRC_SEED 0xFFFF
#define POLY16 0x1021
unsigned short crc_generateCRC16(unsigned char *buf, int length)
{
unsigned short crc,data,val;
int i;
crc = CRC_SEED;
for(i=0;i<length;i++) {
if((i % 8) == 0)
data = (*buf++)<<8;
val = crc ^ data;
crc = crc << 1;
data = data <<1;
if(val & 0x8000)
crc = crc ^ POLY16;
}
return crc;
}
现在用Delphi 改写如下
function crc_generateCRC16(buff:PByte;length:integer):word;
const CRC_SEED = $FFFF;
const POLY16 = $1021;
var
crc,data,val:word;
i:integer;
begin
crc := $FFFF; data:=0;
for i:=0 to length do
begin
if ((i mod 8) =0) then
begin
data:= (buff^) shl 8;
integer(buff):=integer(buff)+1;
end;
val:=crc xor data;
crc:= crc shl 1;
data:=data shl 1;
if ((val and $8000)<>0) then crc := crc xor $1021;
end;
result:=crc;
end;
问题是 ,改写后算出的结果和之前C的不一致,比如 之前C写的 计算 5C 07 的CRC16 结果是 0xdfbe,而改写后的却怎么算都不是这个。请各位大侠帮帮我!