我正在尝试更好地理解Kademlia的XOR距离度量标准,所以我编写了一个小型虚拟程序来更好地理解。在这里,我并没有使用160位数字作为我的键,而是使用某个用户标识符的sha256哈希值。
这是我的xor距离函数,它是否更加正确?我对每个字节进行XOR运算,将其添加到缓冲区“rawBytes”中,并将该字节缓冲区转换为整数。
这是我的xor距离函数,它是否更加正确?我对每个字节进行XOR运算,将其添加到缓冲区“rawBytes”中,并将该字节缓冲区转换为整数。
func XorDistance(node string, otherNode string) uint64 {
var rawBytes [32]byte
for i := 0; i < 32; i++ {
rawBytes[i] = node[i] ^ otherNode[i]
}
distance, _ := binary.Uvarint(rawBytes[:])
return distance
}
Uvarint()
(以及它的有符号版本)使用一种描述在https://developers.google.com/protocol-buffers/docs/encoding中的独特编码(也在`encoding/binary`包的源代码中),该编码将最不显著位放在前面,并且每个字节只有7个数据位(而不是8个)。因此,在尝试解释字节切片中的任意数据时,它将给出意外的结果。回答已更新。 - Chang Qiannode
和otherNode
长度的检查,并返回类型为error
的相应返回值,以避免出现index out of range
错误。 - Chang Qian