这是从这两者获得相同结果的方法:
byte[] mm3_le = Hashing.murmur3_128().hashString("abc", UTF_8).asBytes();byte[] mm3_be = Bytes.toArray(Lists.reverse(Bytes.asList(mm3_le)));assertEquals("79267961763742113019008347020647561319", new BigInteger(mm3_be).toString());哈希码的字节需要被视为 小端, 但
BigInteger将字节解释为大端。大概是您
new BigInteger(hex,16)用来创建
BigInteger,但是的输出
HashCode.toString()实际上是一系列十六进制数字对,它们表示散列字节的顺序与它们返回的顺序相同
asBytes()(小尾数)。(您还可以反转这些对的十六进制,以获取一个十六进制数,当传递给时,该十六进制数的确产生相同的结果
newBigInteger(reversedHex, 16))。
我认为的文档
toString()有些混乱,因为它指的是“大端”。它实际上并不意味着该方法的输出是十六进制数字,表示被解释为大端字节的字节。
要添加到,我们还有一个未解决的问题。
asBigInteger()``HashCode



