Java Modbus CRC16校验

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Modbus CRC16校验相关的知识,希望对你有一定的参考价值。

最近在做一个跟前端硬件通信的中间件,其中数据校验采用CRC16,网上查了很多资料,但发现最终的计算结果都不同……耗时两天终于解决了,做个记录。

 1  /**
 2      * 计算CRC16校验码
 3      *
 4      * @param bytes 字节数组
 5      * @return {@link String} 校验码
 6      * @since 1.0
 7      */
 8     public static String getCRC(byte[] bytes) {
 9         int CRC = 0x0000ffff;
10         int POLYNOMIAL = 0x0000a001;
11         int i, j;
12         for (i = 0; i < bytes.length; i++) {
13             CRC ^= ((int) bytes[i] & 0x000000ff);
14             for (j = 0; j < 8; j++) {
15                 if ((CRC & 0x00000001) != 0) {
16                     CRC >>= 1;
17                     CRC ^= POLYNOMIAL;
18                 } else {
19                     CRC >>= 1;
20                 }
21             }
22         }
23         return Integer.toHexString(CRC);
24     }
25 
26     /**
27      * 将16进制单精度浮点型转换为10进制浮点型
28      *
29      * @return float
30      * @since 1.0
31      */
32     private float parseHex2Float(String hexStr) {
33         BigInteger bigInteger = new BigInteger(hexStr, 16);
34         return Float.intBitsToFloat(bigInteger.intValue());
35     }
36 
37     /**
38      * 将十进制浮点型转换为十六进制浮点型
39      *
40      * @return String
41      * @since 1.0
42      */
43     private String parseFloat2Hex(float data) {
44         return Integer.toHexString(Float.floatToIntBits(data));
45     }

 

以上是关于Java Modbus CRC16校验的主要内容,如果未能解决你的问题,请参考以下文章

使用了modbus协议的程序,如何进行CRC校验

CRC-16/MODBUS计算详细步骤

Modbus的CRC校验实验

modbus rtu校验方法

Modbus CRC16 校验计算函数

CRC-16/MODBUS 算法