Я пытаюсь лучше понять показатель расстояния XOR Kademlia, поэтому я написал небольшую фиктивную программу, чтобы попытаться лучше понять. Я также не использую 160-битное число в качестве моего ключа, а скорее хэш sha256 некоторого идентификатора пользователя.
Вот моя функция расстояния 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
}