为何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
相关产品推荐
相关产品推荐

