Java实现CRC16算法校验 mobbus 本文共有3487个字,关键词: ![](https://blog.ww4k.com/usr/uploads/2022/12/3006718494.png) ``` /** * crc16校验 * * @author pan */ public class Crc16Utils { /** * 获取源数据和验证码的组合byte数组 * * @param strings 可变长度的十六进制字符串 * @return */ public static byte[] getData(String...strings) { byte[] data = new byte[]{}; for (int i = 0; i 0) { // 如果移出位为 1, CRC寄存器与多项式A001进行异或 crc = crc >> 1; crc = crc ^ 0xA001; } else // 如果移出位为 0,再次右移一位 crc = crc >> 1; } } return intToBytes(crc); } /** * 将int转换成byte数组,低位在前,高位在后 * 改变高低位顺序只需调换数组序号 */ private static byte[] intToBytes(int value) { byte[] src = new byte[2]; src[1] = (byte) ((value>>8) & 0xFF); src[0] = (byte) (value & 0xFF); return src; } /** * 将字节数组转换成十六进制字符串 */ public static String byteTo16String(byte[] data) { StringBuffer buffer = new StringBuffer(); for (byte b : data) { buffer.append(byteTo16String(b)); } return buffer.toString(); } /** * 将字节转换成十六进制字符串 * * int转byte对照表 * [128,255],0,[1,128) * [-128,-1],0,[1,128) */ public static String byteTo16String(byte b) { StringBuffer buffer = new StringBuffer(); int aa = (int)b; if (aa<0) { buffer.append(Integer.toString(aa+256, 16)+" "); }else if (aa==0) { buffer.append("00 "); }else if (aa>0 && aa<=15) { buffer.append("0"+Integer.toString(aa, 16)+" "); }else if (aa>15) { buffer.append(Integer.toString(aa, 16)+" "); } return buffer.toString(); } public static void main(String[] args) { // 01 06 0F A4 00 01 0A FD 设定01内机开启 byte[] dd = Crc16Utils.getData("01","06","0F","A4","00","01"); String str = Crc16Utils.byteTo16String(dd).toUpperCase(); System.out.println(str); } } ``` × yihong (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 码农心得 2022-12-02 评论 1744 次浏览