调用程序: 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);
}
https://www.cnblogs.com/andysd/p/3937627.html
http://blog.csdn.net/trbbadboy/article/details/16859937
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);
}
}