Python:获取字符串十六进制XOR两位校验和

时间:2018-04-26 10:00:59

标签: python python-2.7 checksum xor

新手在这里。

我正在尝试获取字符串的十六进制XOR校验和;我有以下Python 2.7代码:

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

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

现在,当结果包含0时,这可以正常工作。如果最终值为0220,则仅打印2。我考虑过实施.zfill(2),但这只适用于0位于数字之前的情况;因此不可靠。

解决原因可能是什么以及如何解决?

2 个答案:

答案 0 :(得分:2)

你可以这样使用str.format

>>> '{:02x}'.format(2)
'02'
>>> '{:02x}'.format(123)
'7b'

这将格式化为十六进制的整数,同时将其格式化为显示两位数。

对于您的代码,您只需执行return '{:02x}'.format(calc_cksum)

答案 1 :(得分:1)

不是最好的解决方案,但有效 -

def getCheckSum(sentence):
    calc_cksum = 0
    for s in sentence:
        calc_cksum ^= ord(s)
    return str(hex(calc_cksum)).lstrip("0").lstrip("x")

问题在于你要删除" 0"和" x"无论是领先还是尾随。我将其更改为顺序lstrip

您也可以使用正则表达式re