求助CRC校验码计算

mmshixing 2016-05-31 10:39:52
03 7E 00 01 00 10 00 1B 01 08 40 80 D8 00 00 00 00 00 02

上面序列中,前两个字节03 7E是通过后面的序列计算出的CRC码,下面的图片是协议规定的CRC校验的规则,请问怎么得出的03 7E ,我尝试了好多方法都没能计算出来,所以前来求救。主要是想知道计算方法,因为我还要用这个方法去计算别的序列,谢谢大家。


...全文
790 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
还有查表法,网上有很多例子!
  • 打赏
  • 举报
回复
我给你帖两段关键代码,剩下的你自己根据英语的描述补齐

//这个可以产生计算crc查表法使用对应多项式的数组。
void GetTable( unsigned int poly )
{
	unsigned int crc;
	for (unsigned int i = 0; i < 256; i++)
	{
		crc = i;
		for (int j = 8; j > 0; j--)
		{
			if ((crc & 0x1) == 0x1)
				crc = (crc >> 1) ^ poly;
			else
				crc >>= 1;
		}
		m_crcTable[i] = crc;
	}
}

//下面是查表法的关键代码
	while (len > 0)
	{
		crc = ((crc >> 8) ^ m_crcTable[(crc ^ data[index]) & 0xff]);
		index++;
		len--;
	}
m_crcTable 就是查的表,data是数据 上面用的算法跟你的相反。所以0x8005,要转成0xa001传入gettable中。
  • 打赏
  • 举报
回复
这个是很常见的一个多项式,直接百度就有了

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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