用python写海明校验码

用python写海明校验码生成海明校验码 defInput 输入字符串 0 与 1 的组合输出两个参数 字符串的长度 字符列表 string input 请输入 0 1 字符串 returnlen string list string n 表示字符串长度 List 表示字符列表 List gt type List 0 stringn List Input defgetK n par

生成海明校验码

def Input(): """ 输入字符串'0'与'1'的组合 输出两个参数:字符串的长度,字符列表 """ string = input("请输入‘0’‘1’字符串:") return len(string), list(string) # n表示字符串长度,List表示字符列表。List --> type(List[0])=string n, List = Input() def getK(n): """ param: n表示字符串长度 function:计算得到k的值,k为海明码检验位 return:返回参数k """ k = 1 while n+k > pow(2, k)-1: k += 1 return k # k为海明码检验位 k = getK(n) def getHList(n, k, List): """ param:n表示字符串长度,k表示海明码校验位,List表示'0' '1'字符列表 function:初始化列表H,将List里的字符按照规律插入H列表中,未插入的位置则是校验码的位置,初始值为-1 return:返回已经初始化列表H。H --> type(H[0])=int """ H = [-1 for i in range(k+n+1)] cnt = 0 for i in range(1, k+n+1): if i == pow(2, cnt): cnt += 1 continue H[i] = int(List.pop()) return H # 初始化列表H。H --> type(H[0])=int H = getHList(n, k, List.copy()) def getPDict(k, H): """ param: k表示海明码校验位,H表示初始化列表 function: 计算校验码的值 return: 返回字典P,键确定索引位置,值是计算出来的校验码 """ P = dict() for i in range(k): P[i] = None cnt = 0 for bi in range(1, len(H)): if bi == pow(2, cnt): cnt += 1 continue if (bi >> i)&1: if not P[i]: P[i] = H[bi] else: P[i] = P[i]^H[bi] return P # 字典P,在pow(2, key)的H索引位置上插入value P = getPDict(k, H) def insertPInH(P, H): """ param: 字典P,存储了校验码的值。初始化列表H,待插入P的值。 function:按照一定规律将P中的值插入H中 return: 返回列表H """ for key in P: Index = pow(2, key) H[Index] = P[key] return H # H1 表示已经处理好的海明校验码 H1 = insertPInH(P, H.copy()) 

输入字符串:

海明码的校验

[-1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1]

然后将这个数据进行checking,检查是否出错。

def checking(Hs, k): """ param: Hs表示传输过来的字符串,用于验证。k表示校验位数。 function: 用来校验传输的字符串是否出错 """ # Pc得到Pi校验码 Pc = getPDict(k, Hs) print(Pc) Si = [] Svalue = 0 cnt = 0 for i in range(1, len(Hs)): if i == pow(2, cnt): Pi = Pc[cnt] value = Pi^Hs[i] Si.append(value) if value == 0 and cnt == 0: Svalue = 0 else: Svalue += pow(2*value, cnt) cnt += 1 if cnt == k: break print(Si) if Svalue: print("传输错误,错误的索引位置为:", Svalue) print("从下标0开始索引") else: print("传输无误!") checking([-1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1], k) 

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232171.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • gb50174-2017电子信息系统机房设计规范发布时间_机房建设标准规范

    gb50174-2017电子信息系统机房设计规范发布时间_机房建设标准规范机房分级3.1.1电子信息系统机房应划分为A、B、C三级。设计时应根据机房的使用性质、管理要求及其在经济和社会中的重要性确定所属级别。3.1.2符合下列情况之一的电子信息系统机房应为A级1电子信息系统运行中断将造成重大的经济损失;2电子信息系统运行中断将造成公共场所秩序严重混乱。3.1.3符合下列情况之一的电子信息系统机房应为B级。1电子信息系统运行中断将造成较大的经济损…

    2022年9月1日
    2
  • CAD拉伸的快捷命令_cad拉伸实体快捷键

    CAD拉伸的快捷命令_cad拉伸实体快捷键CAD快捷键在CAD绘图中是不可或缺的,刚入门CAD的小伙伴们一定要熟练掌握常用CAD快捷键命令的使用。那么CAD拉伸快捷键命令是什么呢?又该如何使用呢?下面小编就来给大家介绍一下浩辰CAD软件中CA

    2022年8月4日
    7
  • ftp工具类:上传与下载文件

    ftp工具类:上传与下载文件准备工作服务器已经配置好ftp服务linux服务器搭建ftp服务:https://program.blog.csdn.net/article/details/88825921需要用到的jar包:<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</…

    2022年5月11日
    45
  • DM368开发 — 常用指令演示

    DM368开发 — 常用指令演示查看CPU信息:root@dm368-evm:/proc#catcpuinfo Processor   :ARM926EJ-Srev5(v5l)BogoMIPS    :147.86Features    :swphalfthumbfastmultedspjava CPUimplementer:0x41CPUarch

    2022年8月13日
    10
  • 你知道织梦后台安装插件时为什么会出现这个Character postion 686, ‘item’&n

    你知道织梦后台安装插件时为什么会出现这个Character postion 686, ‘item’&n

    2021年9月24日
    45
  • 如何架设邮件服务器

    很多企业局域网内都架设了邮件服务器,用于进行公文发送和工作交流。但使用专业的企业邮件系统软件需要大量的资金投入,这对于很多企业来说是无法承受的。其实我们可以通过WindowsServer2003提供的POP3服务和SMTP服务架设小型邮件服务器来满足我们的需要。  一、安装POP3和SMTP服务组件  WindowsServer2003默认情况下是没有安装POP3和SMTP服务组件

    2022年4月7日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号