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

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

解决Python 2.7中XOR校验和十六进制输出的格式问题

嘿,这个问题我之前也碰到过!你的核心问题出在strip('0x')这个操作上——它不是只去掉开头的0x,而是会移除字符串两端所有属于'0x'字符集的字符。比如当结果是0x02时,strip('0x')会把开头的0和x去掉,还会把剩下的02开头的0也去掉(因为0在字符集里),最后就只剩'2'了,这就是你遇到格式问题的根源。

解决方案:用格式化字符串或切片+补0替代strip

这里有两种可靠的修复方式,都能确保输出始终是两位十六进制字符,不足两位时自动补前导0:

方法1:使用format()函数(推荐)

Python 2.7支持格式化字符串语法,直接生成符合要求的两位十六进制字符串,比先转hex()再处理更简洁可靠:

def getCheckSum(sentence):
    calc_cksum = 0
    for s in sentence:
        calc_cksum ^= ord(s)
    # 格式化为两位小写十六进制,不足补前导0
    return "{:02x}".format(calc_cksum)
    # 如果需要大写十六进制,改成:
    # return "{:02X}".format(calc_cksum)

print getCheckSum('SOME,1.948.090,SENTENCE,H,ERE')

方法2:切片替代strip + zfill补0

如果你更习惯用hex()函数,可以通过切片只去掉开头的0x,再用zfill(2)确保长度为2:

def getCheckSum(sentence):
    calc_cksum = 0
    for s in sentence:
        calc_cksum ^= ord(s)
    # 去掉前两位的'0x',再补前导0到两位
    return hex(calc_cksum)[2:].zfill(2)

print getCheckSum('SOME,1.948.090,SENTENCE,H,ERE')

效果验证

  • 当校验和为0x02时,会输出'02'(而非'2')
  • 当校验和为0x20时,会输出'20'(保留末尾的0)
  • 当校验和为0x00时,会输出'00'(不会变成空字符串)

内容的提问来源于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:36