CRC16校验的学习
来源:互联网 发布:linux 复制粘贴命令 编辑:程序博客网 时间:2024/06/06 03:32
一般一些工业上仪器仪表都会选择CRC16校验,而写程序对帧数据的校验也需要选择CRC16校验看看对不对。所以选择CRC16校验还是很有必要的。
1、51的CRC16校验
/*** @brief 计算CRC* @param *modbusdata:数据指针* @param length:数据长度* @param * @retval 计算的CRC值* @example **/unsigned int crc16_modbus(unsigned char *modbusdata, char length){ char i, j; unsigned int crc = 0xffff;//有的用ffff有的用0 for (i = 0; i < length; i++) { crc ^= modbusdata[i]; for (j = 0; j < 8; j++) { if ((crc & 0x01) == 1) { crc = (crc >> 1) ^ 0xa001; } else { crc >>= 1; } } } return crc;}
2、LUA的CRC16校验
function CRC16(modbusdata, length) local i=0; local j=0; local crc=0; local k=1; local k=1; local l=1; for k=1, length then crc = bit.bxor(crc, modbusdata[k]) for l=1, 8 do if bit.band(crc, 1) == 1 then crc = bit.rshift(crc, 1) crc = bit.bxor(crc, 0xa001) else crc = bit.rshift(crc, 1) end end end return crcend
3、C#上位机的CRC16校验
private int crc16_modbus(byte[] modbusdata, int length){ int i,j; int crc = 0; try { for(i=0; i<length; i++) { crc^=modbusdata[i]; for(j=0; i<8; j++) { if(crc & 0x01 == 1) { crc = (crc >> 1) ^ 0xa001; } else { crc >>= 1; } } } } catch(Exception) { throw; } return crc;}
当然CRC是2字节的,具体存储方式大端存储还是小端存储,不同机器不一样。CRC的初值也可能不一样有的是0x0000,而有的又却是0xFFFF.
具体怎么选还有根据实际应用环境,进行合理的测试取舍。
阅读全文
0 0
- CRC16校验的学习
- CRC16校验的C代码
- C#版的CRC16校验
- c#的CRC16位校验
- c#的CRC16位校验
- CRC16 校验
- CRC16校验
- CRC16校验
- CRC16校验
- CRC16校验
- CRC16校验
- crc16校验
- CRC16 校验
- CRC16校验
- CRC16校验
- CRC16校验
- CRC16校验
- 一种设备的CRC16校验算法
- jsp之编码、安装Browse Deployment Location插件、脚本片段、表达式、注释、声明
- sublime中文出现乱码怎么办?这里有办法
- iOS CollectionView刷新indexPath变化问题
- 173. Binary Search Tree Iterator
- HTML(三) 设置文字列表
- CRC16校验的学习
- 最长公共子序列lcs
- SQL进阶题一(一)
- android get和post请求
- Net知识图谱
- linux上还原自主nuget包需要注意的问题
- Java:如何用链表实现栈
- 幽默笑话-笑话-还有菜吗等
- 实验三:内部模块化的命令行菜单小程序V2.0