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
对比工具检验
说明接口正确。