公司要做个项目,用到crc算法(C#实现),我找了好多资料都没什么进展,希望大家能帮帮我哦 谢谢了先
校验步骤:
1,装一个16位寄存器,所有数位均为1
2,娶被校验串的一个字节与16位寄存器的高位字节进行“异或”运算。运算结果放入这个16位寄存器
3,把这个16位寄存器向右移一位
4,若向右(标记位)移出的数位式1,则生成多项式1010 0000 0000 0001 和这个寄存器进行“异或”运算;若右移出的数位是0,则返回步骤3
5,重复步骤3和4,直至移出8位
6,取被校验串的下一个字节
7,重复步骤3-6,直至被校验串的所有字节均与16位寄存器进行“异或”运算,并移位8次
8,这个16位寄存器的内容即2字节crc错误校验码
这个事HJ/T212-2005污染源在线自动监控(检测)系统数据传输标准中用到的,希望大家帮帮我呀,我的前途可就在各位手上咯
校验步骤:
1,装一个16位寄存器,所有数位均为1
2,娶被校验串的一个字节与16位寄存器的高位字节进行“异或”运算。运算结果放入这个16位寄存器
3,把这个16位寄存器向右移一位
4,若向右(标记位)移出的数位式1,则生成多项式1010 0000 0000 0001 和这个寄存器进行“异或”运算;若右移出的数位是0,则返回步骤3
5,重复步骤3和4,直至移出8位
6,取被校验串的下一个字节
7,重复步骤3-6,直至被校验串的所有字节均与16位寄存器进行“异或”运算,并移位8次
8,这个16位寄存器的内容即2字节crc错误校验码
这个事HJ/T212-2005污染源在线自动监控(检测)系统数据传输标准中用到的,希望大家帮帮我呀,我的前途可就在各位手上咯
2 : WORD tmp = GetByte() ^ ( BYTE )( reg >> 8 )
3 : ..
4 : .
5
6
7
8慢慢写啦~~
BOOL CRC_CHECK(unsigned char buffer[MAX_DATA_LEN],int len)
{
int i,j;
WORD ch,crc=0;
for( i=0;i<len-2;i++) //校验前面所有的字节的crc
{ ch = (unsigned char)buffer[i];
ch=(ch<<8);
for(j=0;j<8;j++)
{ if(((ch^crc) & 0x8000)!=0)
{ crc^=0x6815;
}
ch=(ch<<1);
crc=(crc<<1);
}
}
if( (crc>>8==buffer[len-2]) && (crc & 0X00FF)==buffer[len-1])
return TRUE; return FALSE;
}
{
int i, j;
DWORD current_crc_value = PRESET_VALUE;
for(i = 0; i < nLength; i++) /*len=number of protocol bytes without CRC*/
{
current_crc_value = current_crc_value ^ ((unsigned int)buf[i]);
for(j = 0; j < 8; j++)
{
if(current_crc_value & 0x0001)
{
current_crc_value = (current_crc_value >> 1) ^ POLYNOMIAL;
}
else
{
current_crc_value = (current_crc_value >> 1);
}
}
}
buf[nLength] = (BYTE)(current_crc_value & 0x00ff);
buf[nLength + 1] = (BYTE)((current_crc_value >> 8) & 0x00ff);
}
我不是很懂这些耶 谢谢楼上几个先
有点 CRC 的内容,不过是 C++ 的。
C# 版的 CRCR 网上多的是