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