CRC-16/MODBUS 校验位计算
实验指令: 前23位表示 信息头 + 信息内容。24,25位是待计算的校验位。26位是结束码 7E 01 00 00 01 10 02 00 27 00 0C 00 02 00 00 00 00 00 50 00 3C 00 03 90 0B 0D
在线计算
文章图片
代码实现
#include
#include UINT8 data[23] = { 0x7E, 0x01, 0x00, 0x00, 0x01, 0x10, 0x02, 0x00,
0x27, 0x00, 0x0C, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x50, 0x00, 0x3C, 0x00, 0x03 };
/*
* 函数名 :CRC16
* 描述 : 计算CRC16
* 输入 : ptr---数据,len---长度
* 输出 : 校验值
*/
UINT16 CRC16(UINT8 *ptr, UINT16 len)
{
unsigned char i;
unsigned short crc = 0xFFFF;
if (len == 0) {
len = 1;
}
while (len--) {
crc ^= *ptr;
for (i = 0;
i<8;
i++)
{
if (crc & 1) {
crc >>= 1;
crc ^= 0xA001;
} else {
crc >>= 1;
}
}
ptr++;
}
return(crc);
}int main()
{
printf("%04x\n", CRC16(data, 23));
getchar();
}
【CRC-16/MODBUS 校验位计算】
文章图片
推荐阅读
- Jsr303做前端数据校验
- 参数校验别再写满屏的 if/else 了,差点被劝退……
- TCP协议之校验和
- 寻找写代码感觉(十六)之|寻找写代码感觉(十六)之 集成Validation做参数校验
- 14.|14. Nginx Secure Link
- Form 表单在数栈的应用(上): 校验篇
- 奇偶校验方法(韦根协议)
- Java|java + selenium测试框架 (之校验优化,运行报错但不终止执行)
- 购物车页面渲染
- 大屏数据可视化测试-数据准确性校验