調用程序: 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
提交
取消