您的位置:首页 > 其它

CRC-16/MODBUS 校验位计算

2018-03-07 16:14 447 查看

实验指令: 前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 <stdio.h>
#include <Windows.h>

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();
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息