在比较Python和Java语言中的xxhash实现时,我注意到了这种差异。由xxhash库计算的哈希值与十六进制字符串相同,但当我试图将计算的哈希值作为整数(或长)值时,它们是不同的。
我确信这是某种“端序”问题,但我找不到如何为两种语言获得相同的整数值。
你知道这是怎么发生的吗?
Java代码:
String hexString = "d24ec4f1a98c6e5b";
System.out.println(new BigInteger(hexString,16).longValue());
// printed value -> -3292477735350538661
Python代码:
hexString = "d24ec4f1a98c6e5b"
print(int(hexString, 16))
# printed value -> 15154266338359012955
2条答案
按热度按时间zxlwwiss1#
您将BigInteger转换为long,这就是差异的原因。因为long是一个有符号的64位整数,它溢出为负数。如果你只是打印BigInteger,它会给出相同的结果。
w6lpcovy2#
结果是太大了,无法放入一个长的,并溢出。BigInteger.longValue()的文档:
将此BigInteger转换为长整型。此转换类似于Java™语言规范的第5.1.3节中定义的从long到int的收缩原语转换:如果这个BigInteger太大而不能放入long中,则只返回低64位。请注意,此转换可能会丢失有关BigInteger值的整体大小的信息,并返回符号相反的结果。