uint16_t CRC16_Modbus(unsigned char *ptr, int len) { unsigned int i; uint16_t crc = 0xFFFF; while(len--) { crc ^= *ptr++; for (i = 0; i < 8; ++i) { if (crc & 1) crc = (crc >> 1) ^ 0xA001; else crc = (crc >> 1); } } return crc; }
时间: 2024-03-29 07:39:12 浏览: 74
modbus crc16进制转换
这是一个计算CRC16-Modbus校验值的函数,输入是一个指向unsigned char类型数组的指针和数组长度,输出是一个uint16_t类型的CRC校验值。
函数使用的是多项式为0xA001的CRC算法,该算法也被称为CRC16-IBM或CRC16-ANSI。具体实现方法是,首先将crc的初值设置为0xFFFF,然后对于每个字节,按位异或后再进行8次循环,每次循环将crc右移一位并根据最低位是否为1进行异或。循环结束后,crc的值即为该数组的CRC16-Modbus校验值。
该函数可以用于串行通信、网络通信等场合中数据完整性校验。
阅读全文