CRC16校验网络通信C语言实例
时间: 2023-08-22 20:10:15 浏览: 93
下面是一个简单的C语言实例,用于在网络通信中对数据进行CRC16校验:
```c
#include <stdio.h>
#include <stdint.h>
// CRC16多项式
#define POLY 0x8005
// 计算CRC16校验码
uint16_t crc16(uint8_t *data, int len)
{
uint16_t crc = 0xFFFF;
for (int i = 0; i < len; ++i)
{
crc ^= (uint16_t)data[i] << 8;
for (int j = 0; j < 8; ++j)
{
if (crc & 0x8000)
{
crc = (crc << 1) ^ POLY;
}
else
{
crc <<= 1;
}
}
}
return crc;
}
int main()
{
// 测试数据
uint8_t data[] = {0x01, 0x02, 0x03, 0x04};
int len = sizeof(data) / sizeof(data[0]);
// 计算CRC16校验码
uint16_t crc = crc16(data, len);
// 输出校验码
printf("CRC16: 0x%04X\n", crc);
return 0;
}
```
在上面的代码中,我们首先定义了一个CRC16多项式,然后定义了一个计算CRC16校验码的函数。该函数接收一个数据指针和数据长度,然后通过多项式运算生成CRC16校验码。最后在main函数中,我们测试了一个数据并输出了CRC16校验码。在实际应用中,我们可以将校验码附加在数据末尾一起发送给接收方。
阅读全文