热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaCRC16MODBUS校验算法实现

CRC16MODBUS校验算法,分两种情况,一是参数是字符串,二是参数是字节数组。参考文章1参考文章2直接上代码,第一种参数

CRC16 MODBUS校验算法,分两种情况,一是参数是字符串,二是参数是字节数组。
参考文章1
参考文章2
直接上代码,第一种参数是字符串

public static void main(String[] args) throws IOException {String frame = "01 03 01 48 00 0c";System.out.println(getCRC(frame));
}public static String getCRC(String data) {data = data.replace(" ", "");int len = data.length();if (!(len % 2 == 0)) {return "0000";}int num = len / 2;byte[] para = new byte[num];for (int i = 0; i }/*** 计算CRC16校验码** @param bytes* 字节数组* @return {@link String} 校验码* @since 1.0*/
public static String getCRC(byte[] bytes) {// CRC寄存器全为1int CRC = 0x0000ffff;// 多项式校验值int POLYNOMIAL = 0x0000a001;int i, j;for (i = 0; i >= 1;CRC ^= POLYNOMIAL;} else {CRC >>= 1;}}}// 结果转换为16进制String result = Integer.toHexString(CRC).toUpperCase();if (result.length() != 4) {StringBuffer sb = new StringBuffer("0000");result = sb.replace(4 - result.length(), 4, result).toString();}//高位在前地位在后//return result.substring(2, 4) + " " + result.substring(0, 2);// 交换高低位,低位在前高位在后return result.substring(2, 4) + " " + result.substring(0, 2);
}

执行后结果:

第二种参数是byte数组:

public static void main(String[] args) throws IOException {byte[] bytes = new byte[] { 0x01, 0x03, 0x01, 0x48, 0x00, 0x0c };System.out.println(getCRC2(bytes));
}public static String getCRC2(byte[] bytes) {int CRC &#61; 0x0000ffff;int POLYNOMIAL &#61; 0x0000a001;int i, j;for (i &#61; 0; i >&#61; 1;CRC ^&#61; POLYNOMIAL;} else {CRC >>&#61; 1;}}}// 交换高低位&#xff0c;低位在前高位在后CRC &#61; ((CRC & 0x0000FF00) >> 8) | ((CRC & 0x000000FF) <<8);String result &#61; Integer.toHexString(CRC);return result.substring(0, 2) &#43; " " &#43; result.substring(2, 4);
}

运行结果&#xff1a;

在这里插入图片描述

小菜一枚&#xff0c;不正确之处还请各位指教&#xff01;


推荐阅读
author-avatar
QQweiqiang_850
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有