`
sunguanxing
  • 浏览: 1084414 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CRC16校验码的JAVA实现

阅读更多
http://hi.baidu.com/fanthes/blog/item/f684e5cdc061f3510eb34503.html

1.Design   2.Codeimport java.io.IOException; public class CRC16Checker {             private static int[] index = new int[] { 16, 15, 2, 0 };             private static int[] getBinary(String text) {                        StringBuffer num = new StringBuffer();                        String s; char ch;                        for (int i = 0; i < text.length(); i++) { // Change each char to binary code.                                    s = Integer.toBinaryString(text.charAt(i));                                    // If the code is less than 8 bit, make it as 8 bit.                                    for (int j = 8 - s.length(); j > 0; j--) num.append(0);                                    num.append(s);                        }                        int len = num.length();                        int[] code = new int[len];                        for (int i = 0; i < len; i++) // Change each 0/1 char to int.                            code[i] = Character.getNumericValue(num.charAt(i));                        return code;            }             private static String toHex(int[] num) {                        StringBuffer hex = new StringBuffer(num.length / 4);                        char[] ch = new char[4];                        for (int i = 0; i < num.length;) {                            // Change each 0/1 int to char.                                    ch[0] = Character.forDigit(num[i++], 2);                                    ch[1] = Character.forDigit(num[i++], 2);                                    ch[2] = Character.forDigit(num[i++], 2);                                    ch[3] = Character.forDigit(num[i++], 2);                                    // Change each 4-bit-code to hex number.                                    hex.append(Integer.toHexString(Integer.parseInt(String.valueOf(ch), 2)));                        }                        return hex.toString();            } // CRC codes main process            public static int[] makeCRCCodes(int[] sourceCodes, int[] multinomial) {                        // The lenght of CRC code is N bits longer than source code. The codes                         // from 0 to sourceLength are same as the source. N bits after source                         // are the CRC codes. N is decided by the multinomial.                        // CRC码数组总长为原码长加上校验码码长。数组前部存放原码。校验码存放在数组                        // 最后的N位。校验码长度决定于生成多项式数组0位置上的元素。                        int sourceLength = sourceCodes.length;                        int codesLength = sourceLength + multinomial[0];                        int[] crcCodes = new int[codesLength];                        // Copy source code from 0 to sourceLength. 拷贝原码。                        System.arraycopy(sourceCodes, 0, crcCodes, 0, sourceLength);                        int temp, pos;                        // Division system. 除法器。                        for (int i = 0; i < sourceLength; i++) {                                    // Count value of the input adding the first register.                                    // 用第i位原码和第一个寄存器值模二加。                                    temp = (crcCodes[sourceLength] + sourceCodes[i]) % 2;                                     // Move registers forwards from (1, length) to (0, length - 1).                                     // 第二个寄存器及以后的所有寄存器值前移1位。                                    System.arraycopy(                                                crcCodes, sourceLength + 1, crcCodes, sourceLength, multinomial[0] - 1);                                    // Set the last register with counted value.                                     // 最后一个寄存器值存放计算好的输入值。                                    crcCodes[codesLength - 1] = temp;                                    // Count other registers. 按生成多项式的值算出位置,模二加出该寄存器的值。                                    for (int j = index.length - 2; j > 0; j--) {                                                pos = codesLength - multinomial[j] - 1;                                                crcCodes[pos] = (crcCodes[pos] + temp) % 2;                                    }                        }                        return crcCodes;            }             public static void main(String[] args) throws IOException {                        System.out.print("Input hex data :");                        StringBuffer buf = new StringBuffer();                        char ch = (char) System.in.read();                        while (ch != '\r' && ch != '\n') {                                    buf.append(ch);                                    ch = (char) System.in.read();                        }                        // Get binary codes.                        int[] b = CRC16Checker.getBinary(buf.toString());                        // Make CRC codes.                        b = CRC16Checker.makeCRCCodes(b, CRC16Checker.index);                         // Output code as binary number.                         for (int i = 0; i < b.length;) {                                    for (int j = 0; j < 4; j++, i++) System.out.print(b[i]);                                    System.out.print(' ');                        }                        System.out.println();                        // Output code as hex number.                         System.out.println("The CRC16 code is :" + CRC16Checker.toHex(b));            }} 3. Test report :Case : A (ASCII = 41)Result : 410186CRC bits : 0168 (0000 0001 1000 0110)Run program :Input hex data :A0100 0001 0000 0001 1000 0110The CRC16 code is :410186 Case : CRC16TEST (ASCII = 43 52 43 31 36 54 45 53 54)Result : 455243313654455354fb66 CRC bits : fb66 (1111 1011 0110 0110)Run program :Input hex data :CRC16TEST0100 0011 0101 0010 0100 0011 0011 0001 0011 0110 0101 0100 0100 0101 0101 0011 0101 0100 1111 1011 0110 0110The CRC16 code is :435243313654455354fb66 Case : 5k (ASCII = 35 6b)Result : 356b3f79 CRC bits : 3f79 (0011 1111 0111 1001)Run program :Input hex data :5k0011 0101 0110 1011 0011 1111 0111 1001The CRC16 code is :356b3f79
分享到:
评论

相关推荐

    java实现CRC16校验功能

    java实现CRC16校验功能~ 测试下载,直接运行即可!用的好的给个好评~

    crc16校验java实现

    从数据头到校验码前的CRC16-CCITT的校验值,遵循大端排序方式的规定。CRC16-CCITT码生成多项式为x16+x12+x5+1,简记式1021。

    Java版CRC16校验算法

    CRC16校验算法及十六进制和十六进制字符串转换

    java版_ModBus_CRC16校验

    java ModBus CRC 16 校验_(亲测成功) 还有一个在线版本的 https://www.lammertbies.nl/comm/info/crc-calculation.html

    crc16进制校验码-java实现

    ModBus通讯,CRC校验码生成,Java版实现;ModBus,CRC,Java版实现

    CRC16校验码计算器_V12

    简易版的CRC16校验码计算工具,与串口助手的绝配!如果存在什么BUG欢迎可以提出??无法运行的话,请按照java的运行环境。

    JAVACRC16标准校验CCITT

    标准的CCITT校验,CRC16位码,很准确,网上找的好多都不靠谱,这个是经过多伦测试出的结果,和C通信校验完全一致

    Java Crc16校验码

    Java Crc16校验码

    Modbus RTU CRC-16校验码生成器 CRC_Calc v0.3 最新版

    Modbus RTU CRC-16校验码生成器 CRC_Calc v0.3 这是最新版,多达21种CRC生成公式。体积小巧,免安装,是程序员工程师必备的神器,巴拉巴拉

    CRC-12校验JAVA代码

    CRC 12校验JAVA版 public class CRCtext { public static void main String[] args {  CRC } }

    用于计算CRC16校验码

    用于计算CRC16校验,网络传输校验

    CRC16 校验JAVA代码

    crc校验,输入一个数组,返回一个数组,返回的数组比原数组 多了两个字节,也就是两个校验码,低字节在前,高字节在后.

    java CRC16位校验码

    最近在开发javaSocket和C的通信,其中有数据校验就是采用CCITT方式,在网上找了好多,都不切合实际使用,经过一个星期的奋斗查资料,再根据网上搜获,写出了一套标准的校验方法,结果和C语言的校验一直,其中考虑了...

    基于MODBUS协议的CRC16校验算法-PB

    PB 语言编写的基于MODBUS协议的CRC16校验算法,已验证结果正确。属于程序代码,有问题可以联系QQ:441965142

    ModbusCRC16:这是一个符合modbus协议的CRC16校验算法的java代码的实现

    ModbusCRC16这是一个符合modbus协议的CRC16校验算法的java代码的实现

    crc16 java实现

    modbus 校验码 java的实现类 调用getCRC 方法就可以自动给所传字符串尾部补充校验码

    CRC16循环冗余算法

    CRC16循环冗余算法,高位在前和低位在后都有;...对特定字符串进行转换成16进制字符串,然后将字符串进行CRC16校验,得到校验码. 次工具类已经经过本人亲自验证,完全符合标准,目前项目中用到的就是这个工具类.

    java实现CRC16校验源码和源码说明文件,具备人机交互界面

    4、实现功能:对保存在TXT文件中的一组数据进行CRC16校验,输出校验码,并将校验码和原数据进行打包 5、涉及知识点 (1)界面、按钮和文本框显示和布局 (2)添加按钮的响应事件 (3)弹出文件选择对话框,并打开...

    capl实现crc校验码计算.zip

    capl实现crc校验码计算.zipcapl实现crc校验码计算.zipcapl实现crc校验码计算.zipcapl实现crc校验码计算.zipcapl实现crc校验码计算.zipcapl实现crc校验码计算.zipcapl实现crc校验码计算.zipcapl实现crc校验码计算....

    crc16校验工具类

    crc16校验工具类,从消息头到校验码前的CRC16-CCITT的校验值,遵循大端排序方式的规定。CRC16-CCITT码生成多项式为x16+x12+x5+1,简记式1021

Global site tag (gtag.js) - Google Analytics