static uint16_t CRC16(const uint8_t *arr_buff,uint16_t len)根据函数原型写函数,不查表
时间: 2024-09-25 10:06:18 浏览: 32
这是一个简单的CRC16(循环冗余校验)函数的实现,它使用了标准的二进制除法算法。CRC16是一种常见的数据错误检测方法,给定一个输入缓冲区`arr_buff`和其长度`len`,函数会计算并返回一个16位的CRC值。
```c
static uint16_t CRC16(const uint8_t *arr_buff, uint16_t len)
{
uint16_t crc = 0xFFFF; // 初始化CRC值为所有位全为1,表示无数据
const uint8_t poly = 0x1021; // 使用Xilinx CRC16的标准生成多项式
for (uint16_t i = 0; i < len; ++i)
{
crc ^= arr_buff[i]; // 异或当前字节到CRC上
for (int j = 8; j != 0; --j)
{
if (crc & 0x0001) // 如果最低位是1
{
crc >>= 1;
crc ^= poly; // 将CRC左移一位,并异或多项式
}
else
{
crc >>= 1; // 否则只做左移
}
}
}
return crc; // 返回最终的CRC值
}
```
阅读全文