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

Python 2.7字符串十六进制XOR校验和输出补零问题求助

解决Python 2.7中十六进制XOR校验和的前导零缺失问题

你遇到的问题很典型:当XOR结果小于16(即十六进制的0x10)时,hex()函数会返回不带前导零的单字符字符串,比如0x02会变成'0x2',去掉0x后就只剩'2'了。

最佳解决方案:使用字符串格式化直接生成两位十六进制字符串

比起用.zfill(2)补零,更可靠且简洁的方式是用Python的字符串格式化操作,一步到位生成固定两位的十六进制结果,自动处理前导零的问题。

修改你的函数如下:

def getCheckSum(sentence):
    calc_cksum = 0
    for s in sentence:
        calc_cksum ^= ord(s)
    return '%02x' % calc_cksum  # 生成小写两位十六进制,自动补前导零

如果需要大写的十六进制结果(比如'02'保持小写或转为'02','FF'转为大写),只需要把格式符改成%02X即可:

return '%02X' % calc_cksum

关于.zfill(2)的可行性

其实你考虑的.zfill(2)方法是可以正常工作的,因为XOR后的结果范围是0-255(单个ASCII字符的ord值是0-255,多次XOR后结果仍在这个区间),对应的十六进制最多两位。所以修改原代码为下面这样也能解决问题:

def getCheckSum(sentence):
    calc_cksum = 0
    for s in sentence:
        calc_cksum ^= ord(s)
    return str(hex(calc_cksum)).strip('0x').zfill(2)

不过这种方式需要多一步字符串处理,不如直接格式化来得直观和高效。

测试验证

比如当校验和结果为0x02时,两种方法都会返回'02';结果为0x20时返回'20';结果为0xFF时返回'ff'(或'FF'),完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:41:24