You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java与Python十六进制转long值结果不同的原因及解决方法

问题原因

你遇到的差异本质是Java的long类型是64位有符号整数,而Python的int是无符号任意精度整数。

你的十六进制字符串d24ec4f1a98c6e5b对应的数值是15154266338359012955,这个值超过了Java long的最大值9223372036854775807(即2^63-1)。Java在将BigInteger转换为long时,会按照补码规则把超出范围的数值转换为负数,而Python则直接保留完整的无符号数值。

解决方法

方法1:在Python中获得与Java一致的有符号long值

通过计算补码模拟Java的转换逻辑:

hexString = "d24ec4f1a98c6e5b"
unsigned_val = int(hexString, 16)
# 计算64位有符号long的补码结果
signed_val = unsigned_val if unsigned_val <= 0x7FFFFFFFFFFFFFFF else unsigned_val - 0x10000000000000000
print(signed_val)
# 输出:-3292477735350538661

方法2:在Java中获得与Python一致的无符号数值

Java 8及以上版本支持Long.parseUnsignedLong方法,可直接解析无符号十六进制字符串:

String hexString = "d24ec4f1a98c6e5b";
System.out.println(Long.parseUnsignedLong(hexString, 16));
// 输出值 -> 15154266338359012955

也可以直接用BigInteger输出完整的无符号数值:

String hexString = "d24ec4f1a98c6e5b";
System.out.println(new BigInteger(hexString, 16));
// 输出值 -> 15154266338359012955

内容的提问来源于stack exchange,提问作者Tevfik Kiziloren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 04:46:03