求CRC16的校验代码,请有经验的高手帮忙(50分)

  • 主题发起人 主题发起人 痞子牛
  • 开始时间 开始时间

痞子牛

Unregistered / Unconfirmed
GUEST, unregistred user!
01 01 00 00 13 31 0D 02 01 00 00 00 65 00 00 2D 00 E1 D4 BF
以上的数列中最后两位D4 BF是前面数据01 01 00 00 13 31 0D 02 01 00 00 00 65 00 00 2D 00 E1的CRC校验码,请写过CRC16校验的高手帮帮忙。最好有代码,谢谢!!
 
大富翁们到哪去了?快来救救我吧
 
多项式码为0xA001多项式为G(X)=X^16+X^15+X^2+1,
01 02 03 04 05 06 07 08 的CRC校验值为0xc4f0
08 07 06 05 04 03 02 01 的CRC校验值为0x908a

程序是怎样写的,各位大虾,帮帮忙吧,我快要急得跳楼了
 
高手阿,救救我吧,分不够再加100分!
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1971124
 
先分别将数据和校验码转化成二进制,然后根据他们的位数写成多项式A(x)和G(x),然后进行模2除法,看结果的余数是否符合就可以了,这不是很简单吗
 
这个现成代码很多的,搜索下就有
 
搜索到的代码好像都不对
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1754418
http://vbboshi.myrice.com/vbtech/other/page_2/file44.htm
http://www.ararat.cz/synapse/docs/help/Crc16.html
 
以下的结果应该是C4F0,我究竟错在哪里了??


var
Crctest:word;
str:string;

//调用
str:='0102030405060708'
Crctest:=GetCheckCRC16(str, length(str));
str:=IntToHex(Crctest, 2);

//crc校验函数
function GetCheckCRC16(S:String; len:integer):Word;
//生成多项式X^16+X^15+X+1;
var
i,j:integer;
X,Y:Word;
begin
X:=$FFFF ;
for i:=1 to len do
begin
X:=X xor Ord(S);
for j:=0 to 7 do
begin
Y:=X mod 2;
X:=X shr 1;
if Y = 1 then
X:=X xor $A001
end;
end;
Result:=X;
end;
 
这个问题早已经自己解决了,散分,来者有分!
 
多人接受答案了。
 

Similar threads

后退
顶部