c语言的crc8
uint8_t calcCRC8(uint8_t *ptr, uint8_tlen)
{
uint8_t crc;
uint8_t i;
crc = 0;
while(len--) {
crc ^= *ptr++;
for(i = 0; i < 8; i++) {
if(crc & 0x01)
crc = (crc >> 1) ^ 0x8C;
else
crc >>= 1;
}
}
returncrc;
}
java翻写crc8(错误的):
public static int FindCRC(byte[] data){
int CRC=0;
int genPoly =0x8C;
for(inti=0;i<data.length; i++){
CRC ^=data[i];
for(intj=0;j<8;j++){
if((CRC& 0x01) != 0){
CRC =(CRC >> 1) ^ genPoly;
}else{
CRC>>= 1;
}
}
}
CRC &= 0xff;//保证CRC余码输出为1字节。
return CRC;
}
修正的计算CRC8
public static int FindCRC(byte[] data){
int CRC=0;
int genPoly =0x8C;
for(inti=0;i<data.length; i++){
CRC ^=data[i];
CRC &=0xff;//保证CRC余码输出为1字节。
for(intj=0;j<8;j++){
if((CRC& 0x01) != 0){
CRC =(CRC >> 1) ^ genPoly;
CRC&= 0xff;//保证CRC余码输出为1字节。
}else{
CRC>>= 1;
}
}
}
CRC &= 0xff;//保证CRC余码输出为1字节。
return CRC;
}