使用汉明码进行数据校验
汉明码是一种用于数据校验的编码方法。其算法基于二进制数的位权值,通过添加校验位来检测数据传输中的错误。
以下是一个示例代码,使用汉明码对数据进行校验:
def hamming_encode(data):
# 计算校验位的数量
r = 0
while 2**r <= len(data) + r + 1:
r += 1
# 计算每个校验位所覆盖的数据位
cover = []
for i in range(r):
for j in range(2**i - 1, len(data), 2**(i+1)):
cover.append(j)
# 计算每个校验位的值
code = [0] * (len(data) + r)
for i in range(len(data)):
code[cover[i]] = int(data[i])
for j in range(r):
if i+1 & 2**j:
code[2**j-1] ^= int(data[i])
# 返回编码后的数据
return ''.join(str(b) for b in code)
def hamming_decode(code):
# 计算校验位的数量
r = 0
while 2**r <= len(code):
r += 1
# 计算每个校验位所覆盖的数据位
cover = []
for i in range(r):
for j in range(2**i - 1, len(code), 2**(i+1)):
cover.append(j)
# 计算每个校验位的值
error = 0
for i in range(len(cover)):
s = sum(int(code[j]) for j in range(len(code)) if (j+1) & (i+1))
if s % 2 == 1:
error += 2**i
# 如果存在错误,校正数据
if error > 0:
code