关于CRC16算法的问题

china0452 2014-03-15 11:27:01
做一个项目,其中有个一个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,而改写后的却怎么算都不是这个。请各位大侠帮帮我,问题出在哪了!
...全文
134 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
麒麟编程 2014-03-16
  • 打赏
  • 举报
回复

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧