Java 和 Python 将十六进制转换为 long 时返回不同的值

Tev*_*ren -1 python java

在比较 Python 和 Java 语言中的 xxhash 实现时,我注意到了这种差异。xxhash 库计算的哈希值与十六进制字符串相同,但当我尝试将计算的哈希值作为整数(或长)值时,它们是不同的。

我确信这是某种“字节序”问题,但我找不到如何为两种语言获取相同的整数值。

有什么想法以及为什么会发生这种情况吗?

Java代码:

String hexString = "d24ec4f1a98c6e5b";
System.out.println(new BigInteger(hexString,16).longValue());
// printed value -> -3292477735350538661
Run Code Online (Sandbox Code Playgroud)

Python代码:

hexString = "d24ec4f1a98c6e5b"
print(int(hexString, 16))
# printed value -> 15154266338359012955
Run Code Online (Sandbox Code Playgroud)

ale*_*led 5

您将 Bi​​gInteger 转换为 long,这就是造成差异的原因。因为 long 是有符号 64 位整数,所以它会溢出为负数。如果您只按原样打印 BigInteger,它会给出相同的结果。

      System.out.println(new BigInteger(hexString,16));
# 15154266338359012955
Run Code Online (Sandbox Code Playgroud)