求DNP crc校验算法

来源:百度知道 编辑:UC知道 时间:2024/05/15 06:44:23
注意了是dnp crc校验 生成多项式X16+X13+X12+X11+X10+X8+X6+X5+X2+1
而且它和其他的crc算法有一定区别
没法套用其它的

void get_dnp_crc16(unsigned char *buffer ,unsigned char *crc_1 ,unsigned char *crc_2 ,unsigned char count )
{
unsigned short crc,cv ;
unsigned short i, j, value ;

value = 0;//0xffff ;
crc = 0xa6bc ;

for(i=0; i<count; i++)
{
cv = buffer[i];
value = cv ^ value ;
for(j=0; j<8; j++)
{
if( (value & 1 ) == 1)
{
value >>= 1 ;
value ^= crc ;
}
else
{
value >>= 1 ;
}
}
}

value = value ^ 0xffff;
*crc_1 = (unsigned char)value ;
*crc_2 = (unsigned char)(value >>8) ;
}

观望