newbie在这里。
我试图获得字符串的六角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
之前的情况。因此不可靠。
任何解决方案可能是为什么,以及如何解决它?
不是最好的解决方案,而是起作用 -
def getCheckSum(sentence):
calc_cksum = 0
for s in sentence:
calc_cksum ^= ord(s)
return str(hex(calc_cksum)).lstrip("0").lstrip("x")
问题是,您正在删除" 0"one_answers" X"作为领导或落后。我将其更改为顺序lstrip
。
您也可以使用Regex re
您可以像这样使用str.format
:
>>> '{:02x}'.format(2)
'02'
>>> '{:02x}'.format(123)
'7b'
这将在格式化以显示两个数字时格式化为十六进制的整数。
对于您的代码,您只需执行return '{:02x}'.format(calc_cksum)