У меня есть следующий байтовый массив
>>> string_ba
bytearray(b'4\x00/\t\xb5')
, который легко конвертируется в шестнадцатеричную строку со следующими 2 строками:
hex_string = [chr(x).encode('hex') for x in string_ba]
hex_string = ''.join(hex_string)
которые возвращают
>>> hex_string.lower()
'34002f09b5'
что ожидается. (Это подпись карты RFID)
Я конвертирую это в десятичное число, выполнив вышеизложенное, а затем преобразую из шестнадцатеричной строки в десятичную строку (дополненную нулями) со следующей строкой. У меня есть ограничение в 10 символов в строке, поэтому я вынужден удалить первые 2 символа в строке, чтобы иметь возможность преобразовать его не более чем в 10 десятичных знаков.
dec_string = str(int(hex_string[2:], 16)).zfill(10)
>>> dec_string
'0003082677'
что верно, так как я проверял это с помощью онлайн-конвертера (hex: 002f09b5, dec: 3082677)
Вопрос в том, если есть способ пропустить преобразование из bytearray в hex_string, чтобы получить десятичную строку. Другими словами, чтобы перейти прямо от bytearray к dec_string
Это будет работать на Python 2.7.15.
>>> sys.version
'2.7.15rc1 (default, Apr 15 2018, 21:51:34) \n[GCC 7.3.0]'
Я попытался удалить первый элемент из bytearray, а затем преобразовать его в строку напрямую и соединить. Но это не дает желаемого результата.
string_ba = string_ba[1:]
test_string = [str(x) for x in string_ba]
test_dec_string = ''.join(test_string).zfill(10)
>>> test_dec_string
'0000479181'
Чтобы повторить вопрос, есть ли способ перейти прямо от байта к десятичной строке