用C语言编写16位CRC校验程序代码
时间: 2024-05-05 07:17:05 浏览: 41
16位 CRC 校验代码
以下是一个简单的16位CRC校验程序代码,使用的是多项式0x8005:
```c
#include <stdio.h>
#include <stdint.h>
uint16_t crc16(const uint8_t *data, size_t size)
{
uint16_t crc = 0xFFFF;
size_t i, j;
for (i = 0; i < size; i++)
{
crc ^= (uint16_t)data[i];
for (j = 0; j < 8; j++)
{
if (crc & 0x0001)
{
crc = (crc >> 1) ^ 0xA001;
}
else
{
crc >>= 1;
}
}
}
return crc;
}
int main(void)
{
uint8_t data[] = {0x01, 0x02, 0x03, 0x04};
uint16_t crc = crc16(data, sizeof(data));
printf("CRC: 0x%04X\n", crc);
return 0;
}
```
该程序使用一个16位CRC多项式0x8005,对输入数据进行校验,返回校验值。程序中使用了一个循环来处理每个字节,然后使用另一个循环来处理每个位。在每个位上,如果CRC的最低位为1,就将它右移1位并异或0xA001;否则,只需将其右移1位即可。最后返回CRC值。
阅读全文