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

为何Python将64位负数返回为极大正数?如何将字符串转为64位数字?

解决64位十六进制补码字符串转带符号整数的问题

Python的int类型是任意精度的,不会自动识别固定位数的二进制补码,所以直接转换64位十六进制补码字符串会得到无符号的大整数。要得到对应的带符号整数,只需手动处理补码逻辑:

核心思路

64位有符号整数的取值范围是 -2^63 到 2^63 - 1。如果转换后的无符号整数超过 2^63 - 1(即最高位为1,对应补码的负数),就用该数减去 2^64,即可得到对应的负数值。

代码实现

def hex_to_signed_64bit(hex_str):
    unsigned_num = int(hex_str, 16)
    max_signed = 2**63 - 1
    if unsigned_num > max_signed:
        return unsigned_num - 2**64
    return unsigned_num

# 测试你的示例
print(hex_to_signed_64bit('FFFFFFFFFFFFFF9C'))  # 输出 -100
print(hex_to_signed_64bit('0000000000000064'))  # 输出 100

直接计算示例

如果不想写函数,也可以直接对单个值计算:

# 处理FFFFFFFFFFFFFF9C
num = int('FFFFFFFFFFFFFF9C', 16)
signed_num = num - 2**64 if num > 2**63 -1 else num
print(signed_num)  # -100

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 02:22:14