首页 > 数据库技术 > 详细

Java Modbus CRC16校验

时间:2016-02-25 21:13:44      阅读:361      评论:0      收藏:0      [点我收藏+]

最近在做一个跟前端硬件通信的中间件,其中数据校验采用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校验

原文:http://www.cnblogs.com/koneloong/p/5218136.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!