1. crc8校验接口

static uint8_t crc8( uint8_t * p_buffer, uint16_t buf_size )
{
uint8_t crc = 0;
uint8_t i=0;
if(buf_size <= 0)
{
return crc;
}
while( buf_size-- )
{
for ( i = 0x80; i != 0; i /= 2 )
{
if ( (crc & 0x80) != 0)
{
crc *= 2;
crc ^= 0x07;
}
else
{
crc *= 2;
}
if ( (*p_buffer & i) != 0 )
{
crc ^= 0x07;
}
}
p_buffer++;
}
return crc;
}

2.测试

#include "stdlib.h"
#include <stdio.h>
typedef unsigned char uint8_t;
typedef unsigned int uint16_t;
int main(void)
{
uint8_t tempbuf[]={0x01,0x02,0x03,0x4,0x5};
uint8_t crc=0;

crc=crc8(tempbuf,5);

printf("crc %x\r\n",crc);
return 0;

}

运行: 

root@ubuntu:/home/smbshare/crc8# gcc -o crc crc8.c 
root@ubuntu:/home/smbshare/crc8# ./crc
crc bc

对比工具检验

CRC8校验接口(C语言)_ubuntu

说明接口正确。