调用程序: sum == CalcCRC8( &temp_string[1],(len-1) )
子程序:
/////////////////////按位校验 循环冗余校验
uint8_t CalcCRC8(uint8_t *ptr,uint8_t len) // ptr 为数据指针 len 为数据长度
{
uint8_t i;
uint8_t crc=0;
while(len--)
{
///////////////////////////////////////
i=0x80;
while(i!=0)
{
if(((crc&0x80)!= 0) && ((*ptr)&i)!= 0) //CRC最高位为1且校验bit为1
{
crc <<= 1;
}
else if(((crc&0x80)!= 0) && ((*ptr)&i) == 0) //CRC最高位为1且校验bit为0
{
crc <<= 1;
crc ^= 0x31;
}
else if(((crc&0x80) == 0) && ((*ptr)&i)!= 0) //CRC最高位为0且校验bit为1
{
crc <<= 1;
crc ^= 0x31;
}
else if(((crc&0x80) == 0) && ((*ptr)&i) == 0) //CRC最高位为0且校验bit为0
{
crc <<= 1;
}
i >>= 1;
}
ptr++;
}
return(crc);
}
1 回答
泛舟湖上清波郎朗
TA贡献1818条经验 获得超3个赞
package demo; public class s2 { public static void main(String[] args) { System.out.println(new s2().CalcCRC8(2, 2));; } int CalcCRC8(int ptr, int len) // ptr 为数据指针 len 为数据长度 { int i; int crc = 0; for (int a = 0; a < len; len--) { { // ///////////////////////////////////// i = 0x80; while (i != 0) { if (((crc & 0x80) != 0) && ((ptr) & i) != 0) // CRC最高位为1且校验bit为1 { crc <<= 1; } else if (((crc & 0x80) != 0) && ((ptr) & i) == 0) // CRC最高位为1且校验bit为0 { crc <<= 1; crc ^= 0x31; } else if (((crc & 0x80) == 0) && ((ptr) & i) != 0) // CRC最高位为0且校验bit为1 { crc <<= 1; crc ^= 0x31; } else if (((crc & 0x80) == 0) && ((ptr) & i) == 0) // CRC最高位为0且校验bit为0 { crc <<= 1; } i >>= 1; } ptr++; } } return (crc); } }
添加回答
举报
0/150
提交
取消