循环冗余码的生成和验证
crc循环冗余码计算

crc循环冗余码计算CRC(循环冗余码)是一种常用于错误检测的编码技术。
它通过对数据进行计算,并附加一个校验码,以便在数据传输过程中检测出错误。
本文将介绍CRC的原理、计算方法以及应用领域。
一、CRC的原理CRC是一种循环冗余校验码,它的原理是通过对数据进行除法运算来生成校验码。
具体步骤如下:1. 首先,选择一个生成多项式G(通常用二进制表示),并确定校验码的位数(通常和G的次数相同)。
2. 将数据进行左移,使其比G的次数多一位,然后用G来除这个左移后的数据,得到余数。
3. 将这个余数附加到原始数据的末尾,得到带有校验码的数据。
二、CRC的计算方法CRC的计算方法比较简单,可以通过以下步骤进行:1. 将数据转换为二进制形式。
2. 在数据末尾添加若干个0,位数等于校验码的位数。
3. 用生成多项式G来除这个新的数据,得到余数。
4. 将这个余数附加到原始数据的末尾,得到带有校验码的数据。
三、CRC的应用领域CRC广泛应用于数据通信和存储领域,常见的应用包括:1. 网络通信:在网络通信中,CRC被用于验证数据包的完整性,以确保数据的准确传输。
2. 存储介质:在硬盘、闪存等存储介质中,CRC被用于检测和纠正数据的错误。
3. 无线电通信:在无线电通信中,CRC可用于验证无线电信号的完整性,以提高通信质量。
4. 数据校验:在数据传输过程中,CRC可以用于检测是否出现了错误或数据损坏。
四、CRC的优势和不足CRC具有以下优势:1. 算法简单:CRC的计算方法相对简单,可以快速计算校验码。
2. 高效性:CRC能够检测多种错误类型,包括单比特错误、多比特错误以及奇偶位错误。
3. 可靠性:CRC的位数越多,检测错误的能力越强,提高了数据传输的可靠性。
然而,CRC也存在一些不足之处:1. 无法纠正错误:CRC只能检测错误,无法纠正数据中的错误。
2. 传输效率:CRC需要在数据传输过程中附加校验码,从而增加了传输的开销。
循环冗余码crc校验方法原理

循环冗余码crc校验方法原理循环冗余码(Cyclic Redundancy Check,CRC)是一种常用的错误检测方法,广泛应用于各种通信协议和数据传输系统中。
它通过生成简单的校验码来检测数据传输过程中的错误,并且可以检测到多个比特的错误。
CRC的原理是将数据和预先定义的除数进行异或运算,生成的余数作为校验码附加在传输的数据后面。
校验码的长度取决于除数的长度。
CRC校验过程大致分为以下几个步骤:1.选择除数:CRC校验使用一个预定义的除数,通常是一个固定的二进制数。
除数的长度决定了校验码的长度。
通常使用的除数是由多项式表示的,例如CRC-32使用的除数是0某04C11DB7。
2.对数据进行补位:为了保证数据与除数的位数一致,需要对数据进行补位操作。
通常是在数据的后面添加一些0,使得数据的位数与除数的位数相同。
3.生成校验码:将补位后的数据和除数进行异或运算,得到余数,这个余数就是校验码。
校验码的位数与除数的位数相同。
4.附加校验码:将生成的校验码附加到传输的数据后面,形成一个完整的帧。
5.接收端校验:接收端接收到数据后,执行同样的除数运算。
如果生成的余数与接收到的校验码相同,则数据没有出错。
如果不同,则数据传输过程中发生了错误。
CRC校验方法的优点包括计算简单、运算速度快、可靠性较高。
它可以检测到单比特、双比特、奇数比特和偶数比特的错误。
但是,CRC校验方法并不能纠正错误,只能检测错误。
当校验码本身出现错误时,也无法判断数据是否正确。
在实际应用中,CRC校验方法广泛应用于以太网、无线通信、存储介质等各种数据传输领域。
不同领域的应用可能使用不同的除数,以满足不同的数据传输要求。
总之,CRC校验方法利用除数运算生成校验码,通过校验码的比对来检测数据传输中的错误。
这种方法简单高效,广泛应用于各种通信协议和数据传输系统中,提高了数据传输的可靠性。
循环冗余校验码的原理及应用

循环冗余校验码的原理及应用循环冗余校验码(Cyclic Redundancy Check,简称CRC)是一种在数据传输中用于错误检测的校验码。
CRC的原理是通过在发送数据时附加一个校验值,接收端在接收数据时计算校验值,然后与发送端传递的校验值进行比较,如果两者一致,则说明数据传输没有错误,否则则存在数据错误。
CRC的应用非常广泛,包括网络传输、存储介质、通信等领域。
下面将详细介绍CRC的原理和应用。
1.原理:(1)生成多项式:CRC使用一个生成多项式进行计算。
该多项式可以是任意的,但在应用中通常使用一些标准的多项式。
生成多项式的位数确定了校验码的位数,通常为32位或64位。
(2)数据附加:在发送数据前,发送端会通过生成多项式对数据进行计算,生成一个校验码。
然后将校验码附加在原始数据的末尾。
(3)接收端计算:接收端在接收到数据后,通过与发送端使用同样的生成多项式对接收到的数据进行计算,生成一个接收端的校验码。
(4)校验比较:接收端的生成校验码与发送端传递的校验码进行比较,若一致,则说明数据传输没有错误;若不一致,则说明数据传输存在错误。
2.应用:(1)数据传输:CRC主要应用在网络传输领域,如以太网、Wi-Fi和蓝牙等。
在数据包发送前,发送端会对数据包进行CRC计算,然后将计算得到的校验码附加在数据包中。
接收端在接收到数据包后,再进行CRC计算,然后将计算得到的校验码与接收到的校验码进行比较,以判断是否存在传输错误。
(2)存储介质:CRC也应用在存储介质中,如硬盘驱动器、光盘等。
在数据存储时,CRC会被计算并存储在磁盘或光盘的头部或尾部。
在数据读取时,通过计算CRC来确保数据的完整性。
(3)通信:通信设备通常会使用CRC来检测数据的传输错误。
例如,调制解调器在发送数据前会计算CRC并将其附加在数据中,接收端在接收到数据后计算CRC,并与接收到的CRC进行比较。
(4)校验和验证:CRC也可以用于验证数据的完整性。
循环冗余校验码(crc)的基本原理

循环冗余校验码(CRC)的基本原理循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。
对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R 的多项式G(x)。
根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。
校验码的具体生成过程为:假设发送信息用信息多项式f(X)表示,将f(x)左移R位(则可表示成f(x)*X R),这样f(x)的右边就会空出R 位,这就是校验码的位置。
通过f(x)* X R除以生成多项式G(x)得到的余数就是校验码。
几个基本概念1、多项式与二进制数码多项式和二进制数有直接对应关系:x的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。
可以看出:x的最高幂次为R,转换成对应的二进制数有R+1位。
多项式包括生成多项式G(x)和信息多项式f(x)。
如生成多项式为G(x)=X4+X3+X+1,可转换为二进制数码11011。
而发送信息位1111,可转换为数据多项式为f(x)=X3+X2+X+1。
2、生成多项式是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。
在发送方,利用生成多项式对信息多项式做模2除生成校验码。
在接受方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。
应满足以下条件:a、生成多项式的最高位和最低位必须为1。
b、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做模2除后应该使余数不为0。
c、不同位发生错误时,应该使余数不同。
d、对余数继续做模2除,应使余数循环。
将这些要求反映为数学关系是比较复杂的。
但可以从有关资料查到常用的对应于不同码制的生成多项式如图9所示:N K 码距d G(x)多项式G(x)7 4 3 x3+x+1 10117 4 3 x3+x2+1 11017 3 4 x4+x3+x2+1 111017 3 4 x4+x2+x+1 1011115 11 3 x4+x+1 1001115 7 5 x8+x7+x6+x4+1 11101000131 26 3 x5+x2+1 10010131 21 5 x10+x9+x8+x6+x5+x3+1 11101101 00163 57 3 x6+x+1 100001163 51 5 x12+x10+x5+x4+x2+1 10100001 101011041 1024 x16+x15+x2+1 110000000000 00101图9 常用的生成多项式3、模2除(按位除)模2除做法与算术除法类似,但每一位除(减)的结果不影响其它位,即不向上一位借位。
循环冗余检验的原理说明

循环冗余检验的原理说明在数字通信和数据存储领域,为了确保数据的准确性和完整性,常常会使用各种校验方法。
其中,循环冗余检验(Cyclic Redundancy Check,简称 CRC)是一种被广泛应用的差错检测技术。
那什么是循环冗余检验呢?简单来说,它就像是数据的“质检员”,通过一系列复杂但又有规律的计算,来判断传输或存储的数据是否出现了错误。
要理解循环冗余检验的原理,我们先来看看它是怎么工作的。
假设我们要传输一段数据,比如说一串二进制数字。
在发送端,会根据预先设定好的一个生成多项式,对这串数据进行计算,得到一个余数,这个余数就是循环冗余码(CRC 码)。
然后,把这个 CRC 码附加在原始数据的后面,一起发送出去。
在接收端,收到数据后,同样根据那个生成多项式,对包括附加的CRC 码在内的整个数据进行计算。
如果计算得到的余数是零,那就说明数据在传输过程中没有出错;如果余数不是零,那就意味着数据出现了错误。
那这个神奇的生成多项式是怎么来的呢?它可不是随便选的。
生成多项式的选择直接影响到循环冗余检验的检错能力。
一般来说,生成多项式的阶数越高,检错能力就越强。
但同时,计算的复杂度也会增加。
为了更好地理解循环冗余检验的计算过程,我们来举个例子。
假设我们的生成多项式是 G(x) = x³+ x + 1,对应的二进制数是 1011。
要检验的数据是 1010。
首先,在数据后面补三个零,得到 1010000。
然后,用这个数除以生成多项式对应的二进制数1011。
计算过程就像我们平常做除法一样,只不过这里是二进制的除法。
通过计算,得到余数是 100。
这个 100 就是 CRC 码。
把它附加在原始数据 1010 后面,得到 1010100,发送出去。
接收端收到 1010100 后,再次除以 1011。
如果余数是零,说明数据没错;如果不是零,就说明数据出错了。
循环冗余检验之所以能够有效地检测错误,是因为它利用了数学上的多项式运算的特性。
循环冗余校验码的原理及应用

循环冗余校验码的原理及应用循环冗余校验码(Cyclic Redundancy Check, CRC)是一种常见的错误检测技术,用于验证数据传输的准确性。
它通过在发送数据之前附加一个冗余的校验码,并在接收端对接收到的数据进行校验,以便快速检测并纠正传输中的错误。
1.将每个待发送的数据与一个固定的生成多项式进行除法运算。
2.将除法运算的余数作为校验码添加到发送的数据后面。
3.接收端在接收到数据后,同样使用相同的生成多项式进行除法运算。
4.若接收端得到的余数为0,则说明数据传输没有错误;否则,说明数据传输中出现了错误。
1.网络通信:在计算机网络中,常使用CRC校验码来验证数据包的完整性,防止在传输过程中数据被篡改或错误。
2.存储设备:在硬盘驱动器、固态硬盘等存储设备中,使用CRC校验码来检测存储数据的正确性,防止数据损坏。
3.移动通信:在移动通信中,如GSM、CDMA、LTE等系统中,使用CRC校验来保证无线信号的可靠传输。
4.协议栈:在各种网络协议中,如以太网、WiFi、TCP/IP等,CRC校验码被用于保证数据传输的正确性。
5.数据传输设备:在串行通信中,如串口通信、RS-232等,常使用CRC校验码来验证数据传输。
1.高检测准确率:使用CRC校验码可以有效检测常见的错误类型,如单个位错、双比特错等。
2.高效性能:CRC算法的计算速度快,在实际应用中对系统的性能要求较低。
3.算法简单:CRC算法的实现比较简单和高效,适用于各种硬件和软件平台。
4.容错能力强:CRC校验码可以检测出较长的比特序列错误,如在存储设备中检测大容量文件的正确性。
5.灵活性:通过选择不同的生成多项式,CRC校验码可以适用于不同的数据长度和校验要求。
然而,循环冗余校验码也有一些不足之处,如:1.无法纠正错误:CRC校验码只能检测错误,而无法对错误数据进行纠正。
2.相同残余:不同的错误数据可能会产生相同的CRC校验码,从而导致无法检测到错误。
crc 原理

CRC原理详解1. 引言循环冗余检验(Cyclic Redundancy Check,CRC)是一种常用的错误检测技术,广泛应用于通信、存储等领域。
CRC通过对数据进行多项式计算,生成冗余校验码,并将其附加到数据中。
接收方在接收到数据后,使用相同的多项式计算方法对数据进行校验,如果校验结果与接收到的冗余校验码一致,说明数据未被错误修改;否则,说明数据可能存在错误。
本文将详细介绍CRC的基本原理,包括生成多项式、计算过程、校验方法等。
2. 多项式生成CRC通过多项式生成冗余校验码。
生成多项式是一个固定的二进制数,通常用一个二进制数表示,如110101。
生成多项式的选择对CRC的性能有很大影响,不同的生成多项式可以检测到不同数量的错误,并具有不同的误检率。
生成多项式的选取方法有很多种,常用的有标准CRC多项式、反射CRC多项式和非反射CRC多项式。
标准CRC多项式的最高次项为1,如100000111;反射CRC多项式的最高次项为0,如110101;非反射CRC多项式的最高次项为1,如100000111。
3. 计算过程CRC的计算过程可以简单描述为:将数据按照二进制形式进行处理,除以生成多项式并取余数,将余数作为冗余校验码附加到数据中。
具体计算过程如下: 1. 将要发送的数据转换为二进制形式。
2. 在数据的末尾添加n个0,其中n为生成多项式的位数减1。
3. 将数据除以生成多项式,并取余数。
4. 将余数作为冗余校验码附加到数据末尾。
例如,要发送的数据为101010,生成多项式为110101,则计算过程如下: 1. 将数据转换为二进制形式:101010。
2. 在数据末尾添加5个0:10101000000。
3. 将数据除以生成多项式并取余数:10101000000除以110101,余数为01110。
4. 将余数作为冗余校验码附加到数据末尾:10101001110。
最终发送的数据为10101001110。
循环冗余校验码(crc)的基本原理

A:①水平垂直奇偶校验②循环求和
③循环冗余④正比率
B:①模2除法②定点二进制除法
③二-十进制除法④循环移位法
C:①1100101010111②110010101010011
③110010101011100④110010101010101
D:①可纠正一位差错②可检测所有偶数位错
③可检测所有小于校验位长度的突发错
5、通信与网络中常用的CRC
在数据通信与网络中,通常k相当大,由一千甚至数千数据位构成一帧,而后采用CRC码产生r位的校验位。它只能检测出错误,而不能纠正错误。一般取r=16,标准的16位生成多项式有CRC-16=x16+x15+x2+1和CRC-CCITT=x16+x15+x2+1。
【例1】某循环冗余码(CRC)的生成多项式G(x)=x3+x2+1,用此生成多项式产生的冗余位,加在信息位后形成CRC码。若发送信息位1111和1100则它的CRC码分别为_A_和_B_。由于某种原因,使接收端收到了按某种规律可判断为出错的CRC码,例如码字_C_、_D_、和_E_。(1998年试题11)
1011
------------
11-------余数(校验位)
(4)编码后的报文(CRC码):
1010000
+ 11
------------------
1010011
CRC码为1010011(和纠错)。
在接收端收到了CRC码后用生成多项式为G(x)去做模2除,若得到余数为0,则码字无误。若得到余数不为0,则接收的数据有错。
(2)此题生成多项式有4位(R+1),要把原始报文F(x)左移3(R)位变成1010000
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、题目编写一个循环冗余码的生成和验证程序,并实现停等式ARQ,编程实现如何生成CRC码,传输,加入噪声,检错反馈,检测验证,信息重发的过程二、概要设计CRC校验码的编码方法是用待发送的二进制数据t(x)除以生成多项式g (x),将最后的余数作为CRC校验码。
其实现步骤如下:设待发送的数据块是m位的二进制多项式t(x),生成多项式为r阶的g(x)。
在数据块的末尾添加r个0,数据块的长度增加到m+r位,对应的二进制多项式为。
用生成多项式g(x)去除,求得余数为阶数为r-1的二进制多项式y(x)。
此二进制多项式y(x)就是t(x)经过生成多项式g(x)编码的CRC校验码。
用以模2的方式减去y(x),得到二进制多项式。
就是包含了CRC校验码的待发送字符串。
CRC编码实际上是将代发送的m位二进制多项式t(x)转换成了可以被g (x)除尽的m+r位二进制多项式,所以解码时可以用接受到的数据去除g(x),如果余数位零,则表示传输过程没有错误;如果余数不为零,则在传输过程中肯定存在错误。
CRC码可以看做是由t(x)和CRC校验码的组合,所以解码时将接收到的二进制数据去掉尾部的r位数据,得到的就是原始数据。
三、详细设计如果生成码是10011编码://reg 是一个5 bits 的寄存器把reg 中的值置0.把原始的数据后添加r 个0.While (数据未处理完)BeginIf (reg 首位是1)reg = reg XOR 0011.把reg 中的值左移一位,读入一个新的数据并置于register 的0 bit 的位置。
Endreg 的后四位就是我们所要求的余数。
解码验错://reg 是一个5 bits 的寄存器把reg 中的值置0.把循环冗余码作为原始的数据While (数据未处理完)BeginIf (reg 首位是1)reg = reg XOR 0011.把reg 中的值左移一位,读入一个新的数据并置于register 的0 bit 的位置。
If reg里的数据不为0则要求重发Else 把循环冗余码去掉后四位即是原始数据End四、流程图五、运行结果六、心得体会通过此次编程,我更加了解了循环冗余码,循环冗余校验码又称为多项式码,是一种线性分组码,广泛应用在计算机网络和数据通信中。
CRC码是由两部分组成,前部分是信息码,就是需要校验的信息,后部分是校验码,校验是从数据本身进行检查,它依靠某种数学上约定的形式进行检查,校验的结果是可靠或不可靠,如果可靠就对数据进行处理,如果不可靠,则要进行重发。
CRC 校验由于实现简单,检错能力强,被广泛使用在各种数据校验应用中。
占用系统资源少,用软硬件均能实现,是进行数据传输差错检测地一种很好的手段。
此次编程,让我更加熟练的使用JA V A,并且让我知道了如何用JA V A来实现模2除法。
此次编程,收获颇丰。
七、源程序清单import java.util.Random;import java.awt.Event.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import java.awt.*;import javax.swing.*;public class t extends JFrame implements ActionListener {String str1,ss;int fla=0;Panel p1=new Panel();Panel p2=new Panel();JLabel lab1=new JLabel("输入");JTextField t1=new JTextField(20);JButton bt1=new JButton("确定");JButton bt2=new JButton("发送");JButton bt3=new JButton("重输");JTextArea t2=new JTextArea();JTextArea t3=new JTextArea();JScrollPane sp=new JScrollPane(t2,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_S CROLLBAR_NEVER);JScrollPane sp1=new JScrollPane(t3,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_S CROLLBAR_NEVER);public t(){super("编码");p1.setLayout(new FlowLayout());p1.add(lab1);p1.add(t1);add(p1,"North");add(sp);p2.setLayout(new GridLayout(1,3));p2.add(bt1);p2.add(bt2);p2.add(bt3);add(p2,"South");bt1.addActionListener((ActionListener) this);bt2.addActionListener((ActionListener) this);bt3.addActionListener((ActionListener) this);setSize(350,350);setVisible(true);addWindowListener(new windowclose());}void tt2 (){JFrame frame=new JFrame("解码");setLayout(new GridLayout(0,1));frame.add(sp1);frame.setSize(350,350);frame.setVisible(true); addWindowListener(new windowclose());}public class windowclose extends WindowAdapter{ public void windowClosing(WindowEvent e){ System.exit(0);}}public void actionPerformed(ActionEvent e){ if(e.getActionCommand().equals("确定")){t1.setEditable(false);}if(e.getActionCommand().equals("发送")){if(fla==0)tt2();str1=t1.getText();send();}if(e.getActionCommand().equals("重输")){t1.setText("");t2.setText("");ss="";t1.setEditable(true);t3.setText("");fla++;}}private void send() { // 数据处理求余发送int[] dat;int[] reg = { 1, 0, 0, 1, 1 }; // 生成多项式int[] res = { 0, 0, 0, 0, 0 }; // 存放校验和int len1 = str1.length();char[] a1 = str1.toCharArray();t2.append("生成多项式是:");t3.append("生成多项式是:");for(int i=0;i<reg.length;i++){t2.append(" "+reg[i]);t3.append(" "+reg[i]);}t2.append("\n");t3.append("\n");for (int i = 0; i < len1; i++) {String str = Integer.toBinaryString(a1[i]);int len = str.length();String s1 = "", s2;dat = new int[len + 4];for (int n = 0; n < len + 4; n++) {dat[n] = 0;}char[] a2 = str.toCharArray();for (int n = 0; n < len; n++) {String s = String.valueOf(a2[n]);dat[n] = Integer.parseInt(s);}for (int k = 0; k < 5; k++) {res[k] = dat[k];}for (int k = 0; k < len; k++) {int j = 0;if (res[j] == 1) {for (j = 0; j < 4; j++) {res[j] = res[j + 1] ^ reg[j + 1];}} else {for (j = 0; j < 4; j++) {res[j] = res[j + 1];}}if (k < len - 1) {res[4] = dat[k + 5];}}for (int k = 0; k < 4; k++) {s2 = String.valueOf(res[k]);s1 = s1.concat(s2);}t2.append("正在发送" + " " + a1[i] + ":" + str + s1 + "\n");int f = receive(str + s1);// 接收方处理if (f == 1) {t2.append(" 发送成功!!" + "\n");} else {t2.append(" 发送失败,重发···" + "\n");i=i-1;}}}private int receive(String str) { // 接收后校验返回信息int flag, fg;int[] dat;int[] reg = { 1, 0, 0, 1, 1 }; // 生成多项式int[] res = { 0, 0, 0, 0, 0 }; // 存放校验和int len = str.length();dat = new int[len];char[] a3 = str.toCharArray();for (int n = 0; n < len; n++) {String s = String.valueOf(a3[n]);dat[n] = Integer.parseInt(s);}Random random = new Random(); // 产生随机错误if (random.nextInt(9999) % 20 == 0) {int i = random.nextInt(len - 1);if (dat[i] == 1)dat[i] = 0;elsedat[i] = 1;}for (int k = 0; k < 5; k++) {res[k] = dat[k];}for (int k = 0; k < len - 4; k++) { // 校验int j = 0;if (res[j] == 1) {for (j = 0; j < 4; j++) {res[j] = res[j + 1] ^ reg[j + 1];}} else {for (j = 0; j < 4; j++) {res[j] = res[j + 1];}}if (k < len - 5) {res[4] = dat[k + 5];}}for (fg = 0; fg < 4; fg++) {if (res[fg] != 0)break;}if (fg == 4) // 接收成功则在接受窗口显示{t3.append("接收到: " + str + "\n");flag = 1;String ch = str.substring(0, len - 4);Integer aa = Integer.valueOf(ch, 2);byte[] b = new byte[1];b[0] = (byte) aa.byteValue();String s1 = new String(b);ss = ss + s1;t3.append(" " + s1 + " 接收成功!!" + "\n"); } else { // 接受失败String ch = str.substring(0, len - 4);Integer aa = Integer.valueOf(ch, 2);byte[] b = new byte[1];b[0] = (byte) aa.byteValue();String s1 = new String(b);flag = 0;t3.append(""+ s1 +" 接收失败,重传··." +"\n");}return flag;}public static void main(String[] args){new t();}}。