欢迎来我Python萌新的小站

用Python实现汉明码生成及校验

最近正好公司有个项目需要将现有编码转为汉明码进行数据传输,闲来无事,就简单写了一个demo实现汉明码的输出和校验。

汉明码(Hamming Code)是广泛用于内存和磁盘纠错的编码。汉明码不仅可以用来检测转移数据时发生的错误,还可以用来修正错误。(要注意的是,汉明码只能发现和修正一位错误,对于两位或者两位以上的错误无法正确和发现)。

Demo实现的是12位原始二进制数范围(即十进制数据范围在0~4096之间),此时需要使用5位汉明校验码进行校验,一共为17位。

其中汉明校验码分别位于第1,2,4,8,16位。

P16 P8 P4 P2 P1
D3 0 0 0 1 1
D5 0 0 1 0 1
D6 0 0 1 1 0
D7 0 0 1 1 1
D9 0 1 0 0 1
D10 0 1 0 1 0
D11 0 1 0 1 1
D12 0 1 1 0 0
D13 0 1 1 0 1
D14 0 1 1 1 0
D15 0 1 1 1 1
D17 1 0 0 0 1

根据上表,可以得出:

汉明码生成

汉明码输出——将十进制数字输入函数中,返回生成的汉明码:

汉明码校验

汉明码校验时同样根据生成的表格,将汉明校验码得出。不同的时,校验时需要将自身一起加入进行校验,即:

然后按P16,P8,P4,P2,P1的顺序将二进制数拼接起来,得出汉明码的错误位数。将错误位数修成再剔除汉明校验码,即可还原为原始数据。

汉明码校验——将汉明码输入函数,返回二进制原始数据:

输出结果:

 

喜欢 (10)分享 (0)
(2)个小伙伴在吐槽
  1. except Exception as e: if e == 'list index out of range': 这里到不如写except IndexError
    Python2021-11-05 08:13 回复
发表我的评论
取消评论
友情提示:插入代码时请使用:  <pre>要插入的代码</pre>   以达到最佳效果!

表情     8 + 2 = ? (必填)

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址