c语言写crc16校验
时间: 2023-09-01 08:07:25 浏览: 99
以下是一个简单的C语言CRC16校验代码示例:
```
#include <stdio.h>
#define POLY 0x1021 // CRC16校验使用的多项式
#define INIT 0xFFFF // CRC16校验初始值
unsigned short crc16(unsigned char *data, int length)
{
unsigned short crc = INIT;
int i, j;
for (i = 0; i < length; i++)
{
crc ^= (unsigned short)(data[i] << 8);
for (j = 0; j < 8; j++)
{
if (crc & 0x8000)
crc = (crc << 1) ^ POLY;
else
crc <<= 1;
}
}
return crc;
}
int main()
{
unsigned char data[] = {0x01, 0x02, 0x03, 0x04};
unsigned short crc = crc16(data, sizeof(data));
printf("CRC16: %04X\n", crc);
return 0;
}
```
在此示例中,我们使用了一个16位的CRC多项式0x1021,这是一种广泛使用的CRC16校验多项式。INIT是CRC16的初始值,通常设置为0xFFFF。接着我们遍历了数据,每次将一个字节异或到CRC值上,并对这个CRC值进行8次左移和异或操作。最后返回CRC16校验结果。
阅读全文