CRC8使用记录
- 写法1
uint8_t check_crc8( uint8_t *data_d, uint16_t size )
{
uint8_t crc = 0;
uint8_t i=0;
if(size <= 0)
{
return crc;
}
while( size-- )
{
//SYS_TEST("*data_d=%x \r\n",*data_d);
for ( i = 0x80; i != 0; i /= 2 )
{
SYS_TEST("i=%d \r\n",i);
if ( (crc & 0x80) != 0)
{
crc *= 2;
crc ^= 0x07;
}
else
{
crc *= 2;
}
if ( (*data_d & i) != 0 )
{
crc ^= 0x07;
}
}
data_d++;
}
SYS_TEST("crc=%x \r\n",crc);
return crc;
}
- 写法2(推荐)
uint8_t crc8_crc8(uint8_t *data, int size)
{
uint8_t crc = 0x00;
uint8_t bit =0;
while (size--)
{
crc ^= *data++;
for (bit = 0; bit < 8; bit++)
{
if (crc & 0x80)
{
crc = (crc << 1) ^ 0x07;
}
else
{
crc <<= 1;
}
}
}
SYS_TEST("crc=%x \r\n",crc);
return crc;
}
- 测试结果

测试结果
数据 0x01,0x02,0x03,0x04,0x05
crc8=bc
证明计算是正确的
分享链接
https://blog.youkuaiyun.com/dop102/article/details/102930247
本文详细介绍了CRC8算法的两种C语言实现方式,包括逐位计算和优化版本,并通过测试数据0x01-0x05验证了其正确性。链接分享来自优快云博客。
12万+

被折叠的 条评论
为什么被折叠?



