精华内容
下载资源
问答
  • crc循环校验 java代码实现
    2021-03-04 03:47:48

    crc

    循环校验

    java

    代码实现

    private byte[] FormCrc(byte[] CRC_buf) { //

    生成

    CRC-16

    校验码,返回的是整型形式的数据

    //

    System.out.println("**********

    生成

    CRC-16

    校验码

    ");

    byte[] CRC = new byte[2];

    int len = CRC_buf.length;

    int CRC_ReturnValue = 0xffff;

    int i = 0, j, temp;

    while (len-- != 0) {

    temp = CRC_buf[i++] & 0xff;

    CRC_ReturnValue ^= temp;

    // CRC_ReturnValue^=CRC_buf[i++];

    j = 8;

    while (j != 0) {

    if ((CRC_ReturnValue & 0x01) != 0) {

    CRC_ReturnValue = (CRC_ReturnValue >> 1) ^

    0xA001;

    } else {

    CRC_ReturnValue = CRC_ReturnValue >> 1;

    }

    j--;

    更多相关内容
  • CRC算法 (Java版)

    2019-10-12 01:24:15
    CRC算法,包含8/16/32/64位 CRC校验算法,Java语言实现。
  • 多项式编码(polynomial code),也称为CRC(cyclic redundancy check,循环冗余校验码),多项式编码的思想是:将位串看成是系数为0或1的多项式。CRC校验保护的单位是数据块。数据块的大小根据实际情况而定。每一个...
  • JAVA下使用两种方法(计算法、查表法)实现CRC(XMODEM)算法,以及验证代码
  • 自己写的一个crc16校验的代码,本人就在使用,很好用的,很方便。
  • CRC校验实用程序库在数据存储和数据通讯领域,为了保证数据的正确,就不得不采用检错的手段,下面这篇文章主要给大家介绍了关于Java中循环冗余校验(CRC32)实现的相关资料,需要的朋友可以参考借鉴,下面来一起看看...
  • CRC16 校验JAVA代码

    2012-10-26 17:11:26
    crc校验,输入一个数组,返回一个数组,返回的数组比原数组 多了两个字节,也就是两个校验码,低字节在前,高字节在后.
  • Java编写的CRC校验

    2014-08-20 18:12:20
    Java下的CRC校验,在Android系统Eclipse平台下编译通过,可以直接copy使用
  • 计算字符串或文件的Crc32代码,提供标准的API,适应各语言开发的系统中调用,且与JAVA自身(import java.util.zip.CRC32)的CRC32算法计算结果相同。 // 获取计算字符Crc32代码 // 以10进制返回Crc32代码 CRC32_API ...
  • JCRCGen是完全用Java编写的工具,将输出包含Rocksoft Model CRC算法的简单实现和表驱动实现的公共领域Java代码。 生成多项式可以是8到64位之间的任何8位倍数。
  • 1.做课设的时候看了很多资料,结果很多讲的不清楚,这里转载一篇最好的,最通俗易懂的文章5.3.2循环冗余校验检错方案奇偶校验码只能校验一位错误,本节所要介绍的循环冗余校验码(CRC)的检错能力更强,可以检出多位错误...

    1.做课设的时候看了很多资料,结果很多讲的不清楚,这里转载一篇最好的,最通俗易懂的文章

    5.3.2 循环冗余校验检错方案

    奇偶校验码只能校验一位错误,本节所要介绍的循环冗余校验码(CRC)的检错能力更强,可以检出多位错误。

    1. CRC校验原理

    CRC校验原理其实是很简单的问题,其根本思想就是先在要发送的帧后面附加一个二进制数(这个数就是校验码),生成一个新帧发送给接收端。

    例如: 要发送 1   校验码100000001111(crc-12)

    新帧就是1+100000001111  -> 1100000001111

    当然,校验码不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“模2除法”)。到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。

    因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。

    【说明】“模2除法”与“算术除法”类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位;模2减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。相当于二进制中的逻辑异或运算。也就是比较后,两者对应位相同则结果为“0”,不同则结果为“1”。如100101除以1110,结果得到商为11,余数为1,如图5-9左图所示。如11×11=101,如图5-9右图所示。

    4b9e8ed3f0adb220c360e2f285d979e8.png5d2d62749b00f3f432c7a8cbbe9c5430.png

    图5-9 “模2除法”和“模2乘法”示例

    CRC校验原理步骤:

    (1)先选择(可以随机选择,也可按标准选择,具体在后面介绍)一个用于在接收端进行校验时,对接收的帧进行除法运算的除数(是二进制比较特串,通常是以多项方式表示,所以CRC又称多项式编码方法,这个多项式也称之为“生成多项式”)。

    (2)看所选定的除数二进制位数(假设为k位),然后在要发送的数据帧(假设为m位)后面加上k-1位“0”,然后以这个加了k-1个“0“的新帧(一共是m+k-1位)以“模2除法”方式除以上面这个除数,所得到的余数(也是二进制的比特串)就是该帧的CRC校验码,也称之为FCS(帧校验序列)。但要注意的是,余数的位数一定要是比除数位数只能少一位,哪怕前面位是0,甚至是全为0(附带好整除时)也都不能省略。

    (3)再把这个校验码附加在原数据帧(就是m位的帧,注意不是在后面形成的m+k-1位的帧)后面,构建一个新帧发送到接收端,最后在接收端再把这个新帧以“模2除法”方式除以前面选择的除数,如果没有余数,则表明该帧在传输过程中没出错,否则出现了差错。

    通过以上介绍,大家一定可以理解CRC校验的原理,并且不再认为很复杂吧。

    从上面可以看出,CRC校验中有两个关键点:一是要预先确定一个发送端和接收端都用来作为除数的二进制比特串(或多项式);二是把原始帧与上面选定的除进行二进制除法运算,计算出FCS。前者可以随机选择,也可按国际上通行的标准选择,但最高位和最低位必须均为“1”,如在IBM的SDLC(同步数据链路控制)规程中使用的CRC-16(也就是这个除数一共是17位)生成多项式g(x)= x16 + x15 + x2 +1(对应二进制比特串为:11000000000000101);而在ISO HDLC(高级数据链路控制)规程、ITU的SDLC、X.25、V.34、V.41、V.42等中使用CCITT-16生成多项式g(x)=x16 + x15 + x5 +1(对应二进制比特串为:11000000000100001)。

    2.    CRC校验码的计算示例

    由以上分析可知,既然除数是随机,或者按标准选定的,所以CRC校验的关键是如何求出余数,也就是CRC校验码。

    下面以一个例子来具体说明整个过程。现假设选择的CRC生成多项式为G(X) = X4 + X3 + 1,要求出二进制序列10110011的CRC校验码。下面是具体的计算过程:

    (1)首先把生成多项式转换成二进制数,由G(X) = X4 + X3 + 1可以知道(,它一共是5位(总位数等于最高位的幂次加1,即4+1=5),然后根据多项式各项的含义(多项式只列出二进制值为1的位,也就是这个二进制的第4位、第3位、第0位的二进制均为1,其它位均为0)很快就可得到它的二进制比特串为11001。

    (2)因为生成多项式的位数为5,根据前面的介绍,得知CRC校验码的位数为4(校验码的位数比生成多项式的位数少1)。因为原数据帧10110011,在它后面再加4个0,得到101100110000,然后把这个数以“模2除法”方式除以生成多项式,得到的余数,即CRC校验码为0100,如图5-10所示。注意参考前面介绍的“模2除法”运算法则。

    e4660fb7f8d73e7bde6d6a9c1d04d148.png

    图5-10 CRC校验码计算示例

    (3)把上步计算得到的CRC校验码0100替换原始帧101100110000后面的四个“0”,得到新帧101100110100。再把这个新帧发送到接收端。

    (4)当以上新帧到达接收端后,接收端会把这个新帧再用上面选定的除数11001以“模2除法”方式去除,验证余数是否为0,如果为0,则证明该帧数据在传输过程中没有出现差错,否则出现了差错。

    通过以上CRC校验原理的剖析和CRC校验码的计算示例的介绍,大家应该对这种看似很复杂的CRC校验原理和计算方法应该比较清楚了。

    下面大家做一个练习,假设CRC生成多项式为G(X) = X5 + X4 +X+1,要发送的二进制序列为100101110,求CRC校验码是多少。

    2.CRC-12 源代码

    准备工作:   CRC-12生成多项式 x12+x3+x2+x+1; 对应 0x180F;

    代码:

    package CRC;

    public class CRC12 {

    public static String resultBinaryCRC=null; //crc用二进制表示

    public static String messageBinary=null; //结果用二进制表示

    public static String messageOct=null; //结果用十进制表示

    public static int a = 0x180f; // 生成多项式

    public static int CRCBIT = 12;

    public static void main(String [] args){

    String message="2";

    CRC12 a=new CRC12();

    a.doCalculate(message);

    }

    public void doCalculate(String Num)

    {

    String crcTemp = null;//余数

    Boolean flag = true;

    int number = Integer.valueOf(Num); // 发送的数据的十进制表示

    int nextNumber = number << CRCBIT; // 变成了被除数

    int NumberMinus = Integer.toBinaryString(nextNumber).length()- Integer.toBinaryString(a).length();// 找出被除数比除数多几个0

    int nextNumberString12 = nextNumber >> NumberMinus; // 得到前13位的数值

    // 前12位与除数做异或运算

    while (NumberMinus >=0)

    {

    if (flag == true) //设置boolean目的是保证只运行一次代码

    {

    crcTemp = Integer.toBinaryString(nextNumberString12);

    flag = false;

    }

    if (crcTemp.length() == 13) //余数补0,直到凑齐13位,然后再与生成多项式模2运算

    {

    nextNumberString12 = Integer.parseInt(crcTemp, 2) ^ a; // 余数与生成多项式异或运算

    crcTemp = Integer.toBinaryString(nextNumberString12); // 将余数变成二进制表示

    }

    if(NumberMinus>0)

    {crcTemp = crcTemp + "0";}

    NumberMinus--;

    }

    int k=12-crcTemp.length(); //根据余数的位数,补0变成12位

    StringBuilder resultCrc=new StringBuilder(); //创建最终结果的StringBuilder

    resultCrc.append(Integer.toBinaryString(Integer.parseInt(Num)));

    for(int i=0;i

    {

    resultCrc.append("0");

    }

    resultCrc.append(crcTemp);

    setMessageBinary(resultCrc.toString());

    setResultBinaryCRC(crcTemp);

    int temp=Integer.parseInt(messageBinary,2); //二进制变成十进制表示

    String aaa=Integer.toHexString(temp);

    setMessageOct(aaa);

    System.out.println("你发送的数据十进制表示"+Num);

    System.out.println("你发送的数据二进制表示"+Integer.toBinaryString(number));

    System.out.println("校验码"+this.getResultBinaryCRC());

    System.out.println("最终发送数据二进制表示是"+this.getMessageBinary());

    System.out.println("最终发送数据十进制表示是"+this.getMessageOct());

    }

    public String getResultBinaryCRC() {

    return resultBinaryCRC;

    }

    public void setResultBinaryCRC(String resultBinaryCRC) {

    CRC12.resultBinaryCRC = resultBinaryCRC;

    }

    public String getMessageBinary() {

    return messageBinary;

    }

    public void setMessageBinary(String messageBinary) {

    CRC12.messageBinary = messageBinary;

    }

    public String getMessageOct() {

    return messageOct;

    }

    public void setMessageOct(String messageOct) {

    CRC12.messageOct = messageOct;

    }

    }

    展开全文
  • CRC-12校验JAVA代码

    2013-12-27 15:48:00
    CRC 12校验JAVA版 public class CRCtext { public static void main String[] args {  CRC } }
  • CRC冗余校验,使用java实现,共同学习!!
  • CRC16校验java

    热门讨论 2012-06-04 11:23:36
    之前传过一个,数据长了就不好用。这个好用。
  • CRC32 C语言代码 和 JAVA代码

    千次阅读 2018-05-03 21:21:32
    C语言如下:uint32_t crc32_compute(uint8_t const * p_data, uint32_t size){ uint32_t crccrc = 0xFFFFFFFF; for (uint32_t i = 0; i &lt; size; i++) { crc = crc ^ p_data[i]; for (uint...

    C语言如下:

    uint32_t crc32_compute(uint8_t const * p_data, uint32_t size)
    {
        uint32_t crc;
        crc = 0xFFFFFFFF;
        for (uint32_t i = 0; i < size; i++)
        {
            crc = crc ^ p_data[i];
            for (uint32_t j = 8; j > 0; j--)
            {
                crc = (crc >> 1) ^ (0xEDB88320U & ((crc & 1) ? 0xFFFFFFFF : 0));
            }
        }
        return ~crc;

    }

    JAVA 代码如下:

    public class CRC32 {
        private static long[] crc32Table = new long[256];


        static {
            long crcValue;
            for (int i = 0; i < 256; i++) {
                crcValue = i;
                for (int j = 0; j < 8; j++) {
                    if ((crcValue & 1) == 1) {
                        crcValue = crcValue >> 1;
                        crcValue = 0x00000000edb88320L ^ crcValue;
                    } else {
                        crcValue = crcValue >> 1;


                    }
                }
                crc32Table[i] = crcValue;
            }
        }

        计算Bytes 里所有字节的CRC32
        public static long calculate(byte[] bytes) {
            long resultCrcValue = 0x00000000ffffffffL;
            for (int i = 0; i < bytes.length; i++) {
                int index = (int) ((resultCrcValue ^ bytes[i]) & 0xff);
                resultCrcValue = crc32Table[index] ^ (resultCrcValue >> 8);
            }
            resultCrcValue = resultCrcValue ^ 0x00000000ffffffffL;
            return resultCrcValue;
        }
    }

    展开全文
  • 1、实验题目:CRC校验PPP协议受到数据帧后要对数据部分连同FCS字段做CRC校验,结果若不为“0”,则可以肯定数据在传输过程中出错;结果若为“0”,则只能说明很大概率上数据在传输的过...1、实验题目:CRC校验PPP...

    1、实验题目:CRC校验PPP协议受到数据帧后要对数据部分连同FCS字段做CRC校验,结果若不为“0”,则可以肯定数据在传输过程中出错;结果若为“0”,则只能说明很大概率上数据在传输的过...

    1、实验题目:CRC校验

    PPP协议受到数据帧后要对数据部分连同FCS字段做CRC校验,结果若不为“0”,则可以肯定数据在传输过程中出错;结果若为“0”,则只能说明很大概率上数据在传输的过程中没有出错,而不是百分之百不出错。这个概率与CRC校验时采用的除数有关,我们把使用某个除数做CRC校验,结果为“0”且数据实际不出错的概率称为该除数的有效性。

    本次试验要求同学们以实验的方法验证CRC-16的有效性。

    2、实验内容:

    (1) 随机取1个128位数A。

    (2) 将A与CRC-16做除法得余数B,A*216+B保存在C中。

    (3) 随机修改C中的1个比特,重新与CRC-16做除法运算,记录余数为0的几率。

    (4) 随机修改C中的2个比特,重新与CRC-16做除法运算,记录余数为0的几率。

    (5) 随机修改C中的3个比特,重新与CRC-16做除法运算,记录余数为0的几率。

    3、实验报告内容:

    (1) CRC校验原理。

    (2) 实验记录

    (3) 随机产生的128位数(以16进制表示)。

    (4) 除法运算的算法描述。

    (5) 随机修改C中的1个比特,重新与CRC-16做除法运算,余数为0的几率。

    (6) 随机修改C中的2个比特,重新与CRC-16做除法运算,余数为0的几率。

    (7) 随机修改C中的3个比特,重新与CRC-16做除法运算,余数为0的几率。

    4、实验结果分析:

    (1) 理论上CRC-16的有效性(一定不是100%有效)。

    (2) 实验结果的说服力。

    网上没找到代码,希望编程高手帮帮忙

    ,详情联系403412045#qq.com,#换成@

    展开

    展开全文
  • ModeBusRTUCRC16校验测试工具及java代码
  • public static String crc16(String src, int len) { int crc = 0x0000FFFF; short tc; char sbit; for (int i = 0; i < len; i++) { tc = (short) (crc >>> 8); crc = ((tc ^ s.
  • 当前位置:我的异常网» C++»C的Crc32 代码转成javacrc32 代码 不用java内置C的Crc32 代码转成javacrc32 代码 不用java内置的,该怎么解决www.myexceptions.net网友分享于:2013-03-30浏览:127次C的Crc32 代码...
  • JavaCRC校验原理

    2021-02-27 18:49:35
    一、基本原理CRC检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构成一个总长为n=p+r位的二进制序列;附加在数据序列之后的这个检验码与数据序列的内容之间存在着某种特定的...
  • 收集整理最全的CRC16计算,C语言代码,包括CRC16-IBM/CRC16-MAXIM/CRC16-USB/CRC16-MODBUS/CRC16-CCITT/CRC16-CCITT-FALSE/CRC16-X25/CRC16-XMODEN/CRC16-DNP。 每种代码都包含查表和计算方式。还可以计算CRC表并...
  • JAVA写的CRC校验

    2015-08-18 16:00:50
    java写的CRC校验程序,可直接将类复制到安卓项目中使用
  • crc8 从语言代码如下:unsigned char const crc8_tab[256] = { 0x00,0x07,0x0E,0x09,0x1C,0x1B,0x12,0x15,0x38,0x3F,0x36,0x31,0x24,0x23,0x2A,0x2D, 0x70,0x77,0x7E,0x79,0x6C,0x6B,0x62,0x65,0x48,0x4F,0x46,0.....
  • public class CCRC8_3 {/*public static int[] CRC8_TAB = { 0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12,0x15, 0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D, 0x70, 0x77,0x7E, 0x79, 0x6C, 0x6...
  • java实现CRC校验码

    2021-02-12 19:48:27
    这两天项目中要使用到CRC校验功能,网上大量的例子是针对c、delphi的例子,前期没有做过,理论上也欠缺很多知识,在这里对java如何实现我们想要的crc校验功能做一下自己的总结,以下内容有本分转自网上,希望对有...
  • CRC16校验程序代码

    2013-12-31 11:39:01
    是根据个人需要开发的,很简单,主要是进行CRC校验比对,输入一组数据和多项式进行判断计算,根据我的需要,不判断第一个数据,看图例:“5a”,其余数据一一判断,大家可以参考一下代码,根据自己需要适当修改
  • package CRC; import java.util.Arrays; import java.util.Random; import java.util.Scanner; public class CyclicRedundancyCheck { // 生成码 private int[] generatingCode; // 设置生成码 public void ...
  • CRC校验java

    千次阅读 2017-12-29 15:06:32
    最近做一些设备数据对接,有些数据需要crc检验,验证数据完整性,基本概念快忘光了,写个小的实现复习下。 crc16 modbus生成CRC 的过程为:  1. 将一个16位寄存器装入十六进制FFFF (全1). 将之称作CRC 寄存器.  ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,406
精华内容 5,762
关键字:

crc java代码

java 订阅