Python: Получить строку шестнадцатеричный XOR двухзначную контрольную сумму - PullRequest
0 голосов
/ 26 апреля 2018

Новичок здесь.

Я пытаюсь получить шестнадцатеричную контрольную сумму 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 предшествует цифре; поэтому не надежный.

Любое решение, почему это может быть и как решить?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Не лучшее решение, но работает -

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

0 голосов
/ 26 апреля 2018

Вы можете использовать str.format примерно так:

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

Это отформатирует целое число в шестнадцатеричном формате при форматировании для отображения двух цифр.

Для вашего кода вы просто должны сделать return '{:02x}'.format(calc_cksum)

...