1、 CRC8标准生成多项式
CRC-8 x8+x5+x4+1 0x31(0x131)
CRC-8 x8+x2+x1+1 0x07(0x107)
CRC-8 x8+x6+x4+x3+x2+x1 0x5E(0x15E)
注:
1.由于多项式的最高为都为1,并且在代码的crc8计算中,最高位也是不使用的,
所以在多项式记录时都去掉了最高位。
2.服务器需要检验设备传输的数据,设备c语言写的,CRC8 校验多项式为 x8+x2+x+1
这里记录的是CRC-8 x8+x2+x1+1 0x07(0x107)
这种检验和算法>>>
C语言算法:
unsigned char CRC8(unsigned char *ptr,unsigned char len)
{
unsigned char crc;
unsigned char i;
crc = 0;
while(len--)
{
crc ^= *ptr++;
for(i = 0;i < 8;i++)
{
if(crc & 0x80)
{
crc = (crc << 1) ^ 0x07;
}
else crc <<= 1;
}
}
return crc;
}
Java语言算法(根据上述C语言的算法进行编写):
//TODO:-----------------根据C写法转译--------------------------------------
/* CRC-8, poly = x^8 + x^2 + x^1 + x^0, init = 0 */
/**
* CRC8 校验 多项式 x8+x2+x+1
* @param data
* @return 校验和
*/
public static byte calcCrc8(byte[] data){
byte crc = 0;
for (int j = 0; j < data.length; j++) {
crc ^= data[j];
for (int i = 0; i < 8; i++) {
if ((crc & 0x80) != 0) {
crc = (byte) ((crc)<< 1);
crc ^= 0x107;
} else {
crc = (byte) ((crc)<< 1);
}
}
}
return crc;
}
//TODO:-----------------根据C写法转译--------------------------------------
结果
通过CRC在线计算器验证,C语言和Java语言算法结果与计算器结果一致,算法有效
CRC在线计算器:http://www.ip33.com/crc.html
示例:
计算器结果

代码算法结果

网友评论