Encoding Kademlia作为整数的异或距离

Encoding Kademlia作为整数的异或距离,encoding,p2p,xor,kademlia,Encoding,P2p,Xor,Kademlia,在Kademlia的论文中,它提到使用NodeID的XOR解释为整数。让我们假设我的NodeID1是aaf4c61ddcc5e8a2dabede0f3b482cd9ae9434d而我的NodeID2是ab4d8d2a5f480a37067da17100271cd176607a1。对于比较NodeID1和NodeID2,将其解释为整数的合适方式是什么?我会把它们转换成BigInt和XOR这两个BigInts吗?我在一个实现中看到了这一点。我是否可以将每个NodeID转换为十进制和XOR这些值 我发

在Kademlia的论文中,它提到使用
NodeID
XOR
解释为整数。让我们假设我的
NodeID1
aaf4c61ddcc5e8a2dabede0f3b482cd9ae9434d
而我的
NodeID2
ab4d8d2a5f480a37067da17100271cd176607a1
。对于比较
NodeID1
NodeID2
,将其解释为整数的合适方式是什么?我会把它们转换成
BigInt
XOR
这两个
BigInt
s吗?我在一个实现中看到了这一点。我是否可以将每个
NodeID
转换为十进制和
XOR
这些值

我发现了这个问题,但我正试图更好地理解它到底是如何工作的


注意:这不是为了实现,我只是想了解整数解释是如何工作的。

对于基本的kademlia实现,您只需要对IDs:xor和比较进行2位算术运算。对于这两种情况,ID在概念上都是带溢出的160位无符号整数,即模2^160算术。在后一种情况下,假设端度转换正确,则可以将其分解为20字节或5×u32数组。网络协议最常见的尾数是big-endian,因此字节0将包含160位中最重要的8位

然后,可以逐个子单元应用xor或比较。也就是说,xor只是所有字节的xor,比较是二进制数组比较

使用bigint库函数可能足以实现,但不是最优的,因为与在固定大小的数组上实现必要的位旋转相比,它们具有大小和符号开销

更完整的实现可能还需要一些额外的算术和实用函数

我是否可以将每个NodeID转换成十进制并对这些值进行异或运算

考虑到数字的大小,十进制表示法并不特别有用。对于人类读者来说,十进制或单个位更有用,计算机使用二进制操作,而实际上从不使用十进制