2019独角兽企业重金招聘Python工程师标准>>>

<!-- lang: java -->/*** made by wangming * * 2013-10-28  pm*/package wang.ming.data;public class Analysis {//生成海明码  public static int[] HaiMingMa(int original[],int len ){int checkBits=length(len);    //计算需要多长的校验码
int size=len+checkBits;        //发送的数据长度
int send[]=new int[size];
int o_s=0;   //original当前的偏移量//初始化
for(int i=0;i<size;i++){if(canFit(i+1, checkBits)){send[i]=original[o_s];o_s++;}else {send[i]=0;}
}for(int i=0;i<checkBits;i++){int fill=0;for(int j=1;j<=size;j++){if(canFit(j, checkBits)){if(in(j, i, checkBits)){fill=XOR(fill, send[j-1]);}}}int id=(int)Math.pow(2, (double)i);send[id-1]=fill;
}
return send;}/** 接受海明码  并进行处理*/public static int[]receive(int send[]){int size=send.length;int bits=codeLength(size);int errorBit=check(send, bits,size);int []receive = new int[size-bits];if(errorBit>0){System.out.println("第"+errorBit+"出错了");}if(!canFit(errorBit, bits)){System.out.println("出错的是校验码,不影响结果");}int index=0;for(int i=0;i<size;i++){if(canFit(i+1, bits)){if((i+1)!=errorBit){receive[index]=send[i];}else{receive[index]=XOR(send[i], 1);//对出错的地方进行处理   与1异或即可得到原来的值}index++;}}return  receive;}/** 判断接受的海明码是否出错*/public static int check(int receive[],int bits,int size){int errorBit=0;for(int j=0;j<bits;j++){int flag=0;for(int i=0;i<size;i++){if(canFit(i+1, bits)){if(in(i+1, j, bits)){flag=XOR(flag, receive[i]);}}}int index=(int)Math.pow(2, (double)j)-1;flag=XOR(flag, receive[index]);if(flag==1){errorBit+=(int)Math.pow(2, (double)j);}}return errorBit;}/** x=a*(2*2...*2)+b*(2*2...*2)+...+c*2+d*     [-bits-1-]   [-bits-2-]      *     其中常数a,b,c..等于0,1*     如果 2的y次方前的常数为1   return true*     为0   return false */public static boolean in(int x,int y,int bits){int dive[]=new int[bits];int index=0;for(int i=bits-1;i>=0;i--){if(x/(int)Math.pow(2, (double)i)>0){dive[index]=1;}else{dive[index]=0;}x=x%(int)Math.pow(2, (double)i);index++;}if(dive[bits-y-1]==1){return true;}return false;}/** 对两个数做异或操作* 相等   return 0* 否则   return 1*/public static int XOR(int x,int y){if((x-y)==0){return 0; }else{return 1;}}/** 返回 true   or   false* 如果index是2的n次方   false* 否则  true*/public static boolean canFit(int index,int checkBits){for(int i=0;i<checkBits;i++){if(index==Math.pow(2, (double)i)){return false;}}return true;}/** 由海明码反向推出校验码位数*/public static int codeLength(int len){int num=0;while((++num)>0){//逆向判断if((double)(len)<=Math.pow(2, (double)num)){return num;} if(num>20){return -1;}}return -1;}/*  给定需要传输的原始数据*  返回需要的校验码的位数*  len+x+1<=(2*2*2....*2)   *        [-----x-----]*/public static int  length(int len){int num=0;while((++num)>0){//校验码位数的判断条件if((double)(num+len+1)<=Math.pow(2, (double)num)){return num;}    if(num>20){return -1;}}return -1;}public static void main(String[] args) {System.out.println( Analysis.in(1, 0, 4));int code[]={1,0,1,1,0};int receive[]= Analysis.HaiMingMa(code, 5);receive[6]=0;System.out.println(Analysis.check(receive, 4,9));int recovery[]=Analysis.receive(receive);for(int i=0;i<recovery.length;i++ ){System.out.print(recovery[i]);}}}

转载于:https://my.oschina.net/u/1186193/blog/172498

计算机网络数据链路层的错误检测与纠正之海明码的生成,解码相关推荐

  1. 王道计算机网络 数据链路层整理 超详细版

    数据链路层的基本概念 结点:主机.路由器 链路:网络中两个结点之间的物理通道,链路的传输介质主要有双绞线.光纤和微波.分为有线链路.无线链路. 数据链路:网络中两个结点之间的逻辑通道,把实现控制数据传 ...

  2. 计算机网络——数据链路层局域网、以太网、PPP协议和HDLC协议、链路层设备

    文章目录 前言 一.局域网简介 1.局域网的基本概念和特点 2.局域网的主要要素 3.局域网的分类与 IEEE 802 标准 4.LLC 子层和 MAC 子层 二.以太网 三.无线局域网 四.PPP ...

  3. 计算机网络-数据链路层

    title: 计算机网络-数据链路层 date: 2018-04-12 15:55:15 tags: 每天都感觉时间很紧迫,进步不大,浪费的时间太多了,能做的就是每天进步一点点 --stackfing ...

  4. 计算机网络数据链路层

    数据链路层 数据链路层在物理层提供服务的基础上向网络层提供服务,其主要作用是加强物理层传输原 始比特流的功能,将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路,使之对 网络层表现为一条无差 ...

  5. 计算机网络 - 数据链路层

    一. 数据链路层的功能 数据链路层在物理层提供服务的基础上向网络层提供服务,其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路,使之对网络层表现为 ...

  6. 计算机网络——数据链路层PPP、CSMA/CD协议

    概述 数据链路层属于计算机网络的低层,数据链路层使用的信道的类型有以下两种: (1)点对点通信:这种信道使用一对一的点对点通信方式 (2)广播信道:这种信道使用一对多的广播通信方式,因此过程比较复杂, ...

  7. 计算机网络 | 数据链路层 局域网

    文章目录 链路层和局域网 一.引论和服务 1.引论 1.1 导引 1.2 数据链路层和局域网 1.3 一些术语 2.链路层: 上下文 2.1 传输类比 3.链路层服务(即需要解决的问题) 3.1 数据 ...

  8. 计算机网络 | 数据链路层

    文章目录 数据链路层功能 数据链路层的研究思想 数据链路层的基本概念 数据链路层功能概述 封装成帧和透明传输 封装成帧 透明传输 字符计数法 字符填充法 零比特填充法 违规编码法 差错控制 检错编码 ...

  9. 计算机网络 - 数据链路层 选择填空复习题

    一. 单选题(共35题,70分) (单选题, 2分)以太网地址是由( )字节组成的. A. 3 B. 4 C. 5 D. 6 我的答案: D 正确答案: D 2分 (单选题, 2分)与CSMA/CD网 ...

最新文章

  1. 6月书讯 | 唠嗑也能学数学!
  2. 要出去找工作了,看看多线程和并行的区别及什么时候该用
  3. 花了几百万,创业一年学到了什么
  4. Finally语句块的运行
  5. uni-app小程序 点击页面滚动到指定位置
  6. Java 方法使用final 修饰参数的作用
  7. 1.2 文本域(含可编辑表格实现)
  8. 新版 Windows 10 最佳功能预览,五月即将更新
  9. [必看]首先要求做到的事情![sumtec]
  10. I帧,P帧,B帧简介
  11. 机器学习——关于感知机概念的理解(可能只对本人适用)
  12. java编码native2ascii下载_使用native2ascii 中文字符与Unicode编码相互转换
  13. 车辆管理系统实施方案
  14. cryptojs php 互通_AES 加密解密 CryptoJS + php 方案
  15. iOS 实现Lottie动画
  16. 苹果mac如何连接打印机
  17. 传感器技术-电容式传感器(学习笔记六)
  18. 单片机常用芯片总结(二)——DS1302时钟芯片
  19. 华硕P10S-M主板组装服务器-raid配置方法
  20. CSS控制背景颜色和背景图像的方法

热门文章

  1. eclipse 中提示tomcat 的端口被占用了 后的最快捷解决方法
  2. 使用pandas循环数据帧的最有效方法是什么? [重复]
  3. 如何列出mongo shell中的所有集合?
  4. IntelliJ检查给出“无法解析符号”但仍编译代码
  5. idea 构建java 微服务_使用 IDEA 从 0 开始搭建 Spring Cloud 微服务
  6. Win11无法识别Wmic怎么办?Win11识别不了Wmic的解决方法
  7. php+分针和时针重合,关于时针和分钟重合次数的计算
  8. car-like robot与两轮差速驱动机器人异同分析
  9. mysql查询m到n条数据库,对查询数据库中第M到N条记录的思考
  10. zookeeper 进入客户端_Zookeeper基础知识简单介绍