使用f-string格式化带前导零的十六进制数时遇异常问题
解决Python f-string十六进制格式化前导零问题
问题出在宽度计算逻辑的差异:你用#08x时,这里的宽度8是包含0x前缀的总长度;而原来的%08x仅计算数字部分的长度,两者规则不一样。
举个例子,x=0x600000转换成十六进制数字是600000(6位),用#08x时,0x占2位,剩下6位刚好是数字长度,总长度凑够8位,所以不会补前导零,结果就是0x600000,不符合你的预期。
给你两种解决方法:
方法一:手动添加
0x前缀,单独给数字部分设置8位宽度(和原%格式化逻辑完全对齐):f"<0x{x:08x} 0x{y:08x}>"这里
x:08x会把数字部分补到8位,比如0x600000会被格式化为00600000,加上前缀后就是0x00600000。方法二:保留
#自动加前缀,把总宽度设为10(0x占2位 + 数字部分8位):f"<{x:#010x} {y:#010x}>"#负责自动插入0x,010x指定总长度为10位,数字部分长度不足时用前导零补齐,最终也能得到0x00600000的效果。
测试验证:当x=0x600000、y=0x200000时,两种写法都能输出预期的<0x00600000 0x00200000>。
内容的提问来源于stack exchange,提问作者Aaron Williams
相关产品推荐
相关产品推荐

