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

十进制转Hex 2's complement时位数不足缺失前导0问题求助

解决方案

问题出在hex()函数返回的字符串不会自动补前导零以达到固定位数,只需修改函数,在计算补码值后,通过字符串格式化强制输出指定长度的十六进制字符串即可:

def tohex(val, nbits):
    comp_val = (val + (1 << nbits)) % (1 << nbits)
    # 计算十六进制所需位数:每4位二进制对应1位十六进制
    hex_length = nbits // 4
    # 格式化输出:固定长度、大写、无0x前缀,不足补前导零
    return f"{comp_val:0{hex_length}X}"

效果验证

针对你的示例数据:

  • 当val=688220028058186626、nbits=64时,hex_length=16,函数返回098D0C781BB7B382,与在线工具结果一致。
  • 其他两个长位数osiId转换后也会保持16位格式,比如3858201547035376271会返回358B15DD8AE7FA8F,符合要求。

原理说明

原函数的补码计算逻辑是正确的,问题仅在于输出格式:hex()只会返回刚好能表示数值的十六进制字符,不会补前导零。通过f"{comp_val:0{hex_length}X}"格式化:

  • 0{hex_length}指定固定长度,不足时用前导零填充
  • X表示输出大写十六进制字符,若需要小写可替换为x

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:51:13