猿问

更好地理解 Kademlia 的 XOR Integer Metric

我试图更好地掌握 Kademlia 的 XOR 距离度量,因此我编写了一个小的虚拟程序来尝试更好地理解。我在这里也没有使用 160 位数字作为我的密钥,而是使用某个用户标识符的 sha256 哈希。


这是我的异或距离函数。这或多或少是正确的吗?我对每个字节进行异或运算——将其附加到缓冲区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

}


撒科打诨
浏览 91回答 1
1回答

交互式爱情

这是不正确的,因为binary.Uvarint()只能解码64位以内的数字,而你的rawBytes是256位“varint”编码基本上与原始字节不兼容。你必须使用math/big这个包来使用。这是我对您的代码段的修改版本:func xorDistance(node string, otherNode string) *big.Int {    var rawBytes [32]byte    for i := 0; i < 32; i++ {        rawBytes[i] = node[i] ^ otherNode[i]    }    return big.NewInt(0).SetBytes(rawBytes[:])}
随时随地看视频慕课网APP

相关分类

Go
我要回答