写一个crc16modbus计算函数,C语言,(可以通过参数填写数组地址,和长度)
时间: 2024-09-24 08:28:05 浏览: 39
c代码-CRC16计算C语言计数 CRC16有多种定义----本程序应用于Modbus
在C语言中,你可以创建一个CRC16 Modbus校验函数,它接受一个输入数据数组和它的长度作为参数。CRC16是一种常用的循环冗余校验算法,用于检测数据传输过程中的错误。下面是一个简单的例子:
```c
#include <stdio.h>
#include <stdlib.h>
// CRC16 Modbus 初始化值
#define CRC_INIT 0x0000
// CRC16 Modbus表
const uint16_t CRC_TABLE[256] = {
// ... (这里是一张完整的CRC16表格)
};
uint16_t crc16modbus(uint8_t* data, int length) {
uint16_t crc = CRC_INIT;
for (int i = 0; i < length; i++) {
crc ^= data[i];
for (int j = 0; j < 8; j++) {
if (crc & 0x0001) {
crc = (crc >> 1) ^ 0xA001;
} else {
crc >>= 1;
}
}
}
return crc;
}
// 示例用法
int main() {
uint8_t input[] = {0x12, 0x34, 0x56, 0x78};
int len = sizeof(input);
uint16_t calculated_crc = crc16modbus(input, len);
printf("Calculated CRC16: %04X\n", calculated_crc);
return 0;
}
```
阅读全文