新手在这里。
我正在尝试获取字符串的十六进制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
时,这可以正常工作。如果最终值为02
或20
,则仅打印2
。我考虑过实施.zfill(2)
,但这只适用于0
位于数字之前的情况;因此不可靠。
解决原因可能是什么以及如何解决?
答案 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