如何计算十五个字节的CRC8校验
答案:2 悬赏:30 手机版
解决时间 2021-02-24 07:20
- 提问者网友:川水往事
- 2021-02-23 10:44
如何计算十五个字节的CRC8校验
最佳答案
- 五星知识达人网友:神也偏爱
- 2021-02-23 11:23
在CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算。 CRC计算方法是: 1、 加载一值为0xFFFF的16位寄存器,此寄存器为CRC寄存器。 2、 把第一个8位二进制数据(即通讯信息帧的第一个字节)与16位的CRC寄存器的相异或,异或的结果仍存放于该CRC寄存器中。 3、 把CRC寄存器的内容右移一位,用0填补最高位,并检测移出位是0还是1。 4、 如果移出位为零,则重复第三步(再次右移一位);如果移出位为1,CRC寄存器与0xA001进行异或。 5、 重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理。 6、 重复步骤2和5,进行通讯信息帧下一个字节的处理。 7、 将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低字节进行交换 8、 最后得到的CRC寄存器内容即为:CRC校验码。
全部回答
- 1楼网友:鱼芗
- 2021-02-23 12:22
// 8bit crc (x(8) + x(2) + x(1) + 1) typedef unsigned long dword; typedef unsigned short word; typedef unsigned char byte; #define al2_fcs_coef ((1 << 7) + (1 << 6) + (1 << 5)) //data为指向校验数据的指针,length为长度,返回一个字节的校验码 byte getcrc8(unsigned char * data, int length) { byte cfcs = 0; int i, j; for( i = 0; i < length; i ++ ) { cfcs ^= data[i]; for(j = 0; j < 8; j ++) { if(cfcs & 1) { cfcs = (byte)((cfcs >> 1) ^ al2_fcs_coef); } else { cfcs >>= 1; } } } return cfcs; }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯