好的,您可以执行以下操作:
取任意 2 位(或字节,只需了解大多数语言支持字节运算符远多于位运算符),将它们异或在一起...这是您的验证码...
所以你有了:
xor (^) table
_________________________
| 0 | 1
0 | 0 | 1
1 | 1 | 0
所以某种代码:
byteA = 0x3d;
byteB = 0x47;
verificationCode = byteA ^ byteB;
然后你通过网络发送这 3 个字节,你可以使用它们来检测传输失败......
这不是汉明码,它是一种简单的检测方法......
汉明码适用于半字节,半字节:
想象一下类型:
bit a = 1;
bit b = 0;
bit c = 1;
bit d = 1;
bit p1 = (a + b + d) % 2;
bit p2 = (a + c + d) % 2;
bit p3 = (b + c + d) % 2;
然后将这些位和 pbit 混合在一起并将它们放在电线上:
[p1,p2,a,p3,b,c,d, p4 如果存在]
所以如果你计算另一边的奇偶校验码:
如果翻转了一位,则可以恢复:
(假设所有未指定的奇偶校验位都是正确的)
- 如果 a 关闭,则 p1 和 p2 将是错误的,
- 如果 b 关闭,那么 p1 将是错误的,
- 如果 c 关闭,那么 p2 和 p3 将是错误的,
- 如果 d 关闭,则 p1、p2 和 p3 将是错误的...
如果不是这些状态之一...那么有 2 位或更多位错误,您必须重新传输...
您还可以通过使用第 4 个奇偶校验位来添加一些验证,它也可以方便地放入 8 位字节中......