C语言 CRC-16XMODEM
时间: 2023-09-30 17:04:58 浏览: 262
CRC_16_XMODEM.rar_CRC-16_CRC16_crc 单片机_xmodem
CRC-16XMODEM是一种C语言实现的循环冗余校验算法,用于检测数据传输中的错误。以下是一个简单的实现:
```c
#include <stdint.h>
#define POLY 0x1021 // CRC-16 XMODEM polynomial
uint16_t crc16_xmodem(uint8_t *data, uint32_t length) {
uint16_t crc = 0;
for (uint32_t i = 0; i < length; i++) {
crc ^= (uint16_t)data[i] << 8;
for (uint8_t j = 0; j < 8; j++) {
if (crc & 0x8000) {
crc = (crc << 1) ^ POLY;
} else {
crc <<= 1;
}
}
}
return crc;
}
```
该函数接受一个指向数据的指针和数据长度,并返回一个16位CRC校验值。对于每个字节,它将其左移8位并异或到CRC中。然后,它执行8次循环,每次将CRC左移1位并检查最高位是否为1。如果是,则将CRC与多项式0x1021异或,否则将其左移。最后,函数返回计算得出的CRC值。
阅读全文