用 C实现 CRC-16/MODBUS x16+x15+x2+1校验计算
实现代码
#include <stdio.h>
#include <stdint.h>
uint16_t crc16_modbus(uint8_t *data, uint16_t length) {
uint16_t crc = 0xFFFF;
uint16_t i, j;
for (i = 0; i < length; i++) {
crc ^= data[i];
for (j = 0; j < 8; j++) {
if (crc & 0x0001) {
crc >>= 1;
crc ^= 0xA001;
} else {
crc >>= 1;
}
}
}
return crc;
}
int main() {
uint8_t data[] = {0x01, 0x06, 0x00, 0x1F, 0x08, 0x00};
uint16_t crc = crc16_modbus(data, sizeof(data));
printf("CRC-16/MODBUS: %04X\n", crc);
return 0;
}
打印输出结果为:CCBF 与CRC在线计算器结果一致