兄弟们,谁能给出一段特殊的CRC校验码程序啊,谢谢 传输六个字节,最后一个字节是校验码,生成多项式为g(x) = X^8+X^2+X+1; 陪集码为FFh ,G(x)模2除前5个字节,生成余式R(x),R(x)补码作为校验码.我不想用查表法。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BYTE CRC8; BYTE tabdata; unsigned int datanum; BYTE c,t; CRC8 = 0x00; //初值为0 datanum = 0; while(len--) //每次循环处理一个字节 { c = DataBuf[datanum]; //新移进来的字节值 t = (CRC8>>4) & 0x0F; //要移出的半字节的值 tabdata = CRC_8_tab[t]; //根据移出的半字节的值查表 CRC8 = (CRC8<<4) | c>>4; //将新移进来的高位半字节值添在寄存器末字节中 CRC8 = CRC8^tabdata; //将寄存器与查出的值进行异或运算 t = (CRC8>>4) & 0x0F; //要移出的半字节的值 tabdata = CRC_8_tab[t]; //根据移出的半字节的值查表 CRC8 = (CRC8<<4) | (c&0x0F); //将新移进来的低位半字节值添在寄存器末字节中 CRC8 = CRC8^tabdata; //将寄存器与查出的值进行异或运算 datanum++; //下一个字节 } CRC8Generator(BYTE *DataBuf, unsigned long len) loves123(),兄弟,我没有那张CRC表啊,郁闷,你能发个CRC文件给我吗?[email protected] BYTE CRC_8_tab[16] = //参数表{ 0x00,0x07,0x0e,0x09, 0x1c,0x1b,0x12,0x15, 0x38,0x3f,0x36,0x31, 0x24,0x23,0x2a,0x2d,}; BYTE CRC8Generator(BYTE *DataBuf, unsigned long len){ BYTE CRC8; BYTE tabdata; unsigned int datanum; BYTE c,t; CRC8 = 0x00; //初值为0 datanum = 0; while(len--) //每次循环处理一个字节 { c = DataBuf[datanum]; //新移进来的字节值 t = (CRC8>>4) & 0x0F; //要移出的半字节的值 tabdata = CRC_8_tab[t]; //根据移出的半字节的值查表 CRC8 = (CRC8<<4) | c>>4; //将新移进来的高位半字节值添在寄存器末字节中 CRC8 = CRC8^tabdata; //将寄存器与查出的值进行异或运算 t = (CRC8>>4) & 0x0F; //要移出的半字节的值 tabdata = CRC_8_tab[t]; //根据移出的半字节的值查表 CRC8 = (CRC8<<4) | (c&0x0F); //将新移进来的低位半字节值添在寄存器末字节中 CRC8 = CRC8^tabdata; //将寄存器与查出的值进行异或运算 datanum++; //下一个字节 } return CRC8;}这个就是了,我现在用的就是这种,CRC表就用上面那个就可以了。 兄弟,谢谢!现在CSDN上人气太差了,codeproject,codeguru还是牛啊 【求助】关于再次初始化对话框,谢谢 句柄的本质是什么啊 Invalidate使用问题???? 线程问题 c++程序运行后直接退出 谁知道那里有关于AT命令集中文网站啊?要详细专业的! 测试需长期运行的软件,如何知道其是否存在内存泄漏(哪怕是微小的泄漏)? 我的一个基于对话框的程序有一个怪问题,帮忙看看!! 考试题目:什么是B/S结构,能否详细点说明? 请大侠解释一下这个定义是什么意思阿? 怎么模拟键盘组合键并发向另外的程序 最后90分,请各位高手一定要帮帮小弟拉,急用啊!!!!!!!!!!!!如果分不够以后有了再给!!!
BYTE tabdata;
unsigned int datanum;
BYTE c,t;
CRC8 = 0x00; //初值为0
datanum = 0;
while(len--) //每次循环处理一个字节
{
c = DataBuf[datanum]; //新移进来的字节值 t = (CRC8>>4) & 0x0F; //要移出的半字节的值
tabdata = CRC_8_tab[t]; //根据移出的半字节的值查表
CRC8 = (CRC8<<4) | c>>4; //将新移进来的高位半字节值添在寄存器末字节中
CRC8 = CRC8^tabdata; //将寄存器与查出的值进行异或运算 t = (CRC8>>4) & 0x0F; //要移出的半字节的值
tabdata = CRC_8_tab[t]; //根据移出的半字节的值查表
CRC8 = (CRC8<<4) | (c&0x0F); //将新移进来的低位半字节值添在寄存器末字节中
CRC8 = CRC8^tabdata; //将寄存器与查出的值进行异或运算
datanum++; //下一个字节
}
[email protected]
{
0x00,0x07,0x0e,0x09,
0x1c,0x1b,0x12,0x15,
0x38,0x3f,0x36,0x31,
0x24,0x23,0x2a,0x2d,
};
{
BYTE CRC8;
BYTE tabdata;
unsigned int datanum;
BYTE c,t;
CRC8 = 0x00; //初值为0
datanum = 0;
while(len--) //每次循环处理一个字节
{
c = DataBuf[datanum]; //新移进来的字节值 t = (CRC8>>4) & 0x0F; //要移出的半字节的值
tabdata = CRC_8_tab[t]; //根据移出的半字节的值查表
CRC8 = (CRC8<<4) | c>>4; //将新移进来的高位半字节值添在寄存器末字节中
CRC8 = CRC8^tabdata; //将寄存器与查出的值进行异或运算 t = (CRC8>>4) & 0x0F; //要移出的半字节的值
tabdata = CRC_8_tab[t]; //根据移出的半字节的值查表
CRC8 = (CRC8<<4) | (c&0x0F); //将新移进来的低位半字节值添在寄存器末字节中
CRC8 = CRC8^tabdata; //将寄存器与查出的值进行异或运算
datanum++; //下一个字节
}
return CRC8;}这个就是了,我现在用的就是这种,CRC表就用上面那个就可以了。