riqilang wu CRC根据以下的规则计算: 规范:CRC-CCITT 多项式: 1021h=X16+X12+X5+1 (LSB第一模式) 计算范围:从SOH字节到ETX字节包括这两个字节在内的所有字节 起始值:FFFFh 写出基于C语言的CRC校验
时间: 2024-01-22 08:03:46 浏览: 158
CRC.rar_CRC CCITT_checksum_crc 16_crc 16 ccitt_x16 x12 x5 1
5星 · 资源好评率100%
好的,以下是基于C语言的CRC校验代码,符合你所描述的CRC-CCITT规范和多项式1021h:
```c
#include <stdio.h>
#include <stdint.h>
uint16_t crc_ccitt(uint8_t* data, size_t length)
{
uint16_t crc = 0xFFFF;
for (size_t i = 0; i < length; i++)
{
crc ^= (uint16_t)data[i] << 8;
for (size_t j = 0; j < 8; j++)
{
if (crc & 0x8000)
{
crc = (crc << 1) ^ 0x1021;
}
else
{
crc <<= 1;
}
}
}
return crc;
}
int main()
{
uint8_t data[] = { 0x01, 0x02, 0x03, 0x04, 0x05 };
uint16_t crc = crc_ccitt(data, sizeof(data));
printf("CRC: %04X\n", crc);
return 0;
}
```
其中,`data`是要进行CRC校验的数据,在这个例子中是从0x01到0x05,`length`是数据长度。函数`crc_ccitt`返回计算出的CRC值。在`main`函数中,我们调用了`crc_ccitt`函数并打印出了计算出的CRC值。
阅读全文