关于CRC16算法的问题

china0452 china0452 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
做一个项目,其中有个一个CRC16算法,下面是之前的同事用C实现的(可能是在网上copy的)

#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,而改写后的却怎么算都不是这个。请各位大侠帮帮我,问题出在哪了!
...全文
评论 1
收藏 已收藏
分享
返回顶部
china0452
C语言 70,040 成员 243,237 内容