crc16校验算法c语言
时间: 2023-08-31 10:12:28 浏览: 112
下面是一个简单的 C 语言实现 CRC16 校验算法的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define CRC16_CCITT_INITIAL_VALUE 0xFFFF
#define CRC16_CCITT_POLYNOMIAL 0x1021
unsigned short crc16_ccitt(const void *data, size_t length)
{
unsigned short crc = CRC16_CCITT_INITIAL_VALUE;
const unsigned char *buf = (const unsigned char *)data;
for (size_t i = 0; i < length; ++i)
{
crc ^= (unsigned short)(buf[i]) << 8;
for (int j = 0; j < 8; ++j)
{
if (crc & 0x8000)
{
crc = (crc << 1) ^ CRC16_CCITT_POLYNOMIAL;
}
else
{
crc <<= 1;
}
}
}
return crc;
}
int main()
{
const char *str = "Hello, world!";
unsigned short crc = crc16_ccitt(str, strlen(str));
printf("CRC16-CCITT: %04X\n", crc);
return 0;
}
```
该代码使用了 CCITT 标准的 CRC16 多项式(0x1021)和初始值(0xFFFF)。
其中,`crc16_ccitt()` 函数的第一个参数是待校验的数据,第二个参数是数据长度。该函数返回计算得到的 CRC16 校验值。在 `main()` 函数中,我们使用该函数计算了一个简单字符串的 CRC16 校验值,并打印输出结果。
注意:该实现仅供参考,实际应用中需要根据具体需求进行修改。例如,可以添加参数来指定多项式和初始值。
阅读全文