Реализовать функцию для транскодирования данных, содержащих битовые поля
Реализовать функцию для транскодирования данных, содержащих битовые поля. В решении необходимо использовать побитовые операции. Неиспользуемые поля результата должны содержать нулевые биты.
Входные данные: Шестнадцатиричная строка.

Выходные данные: Десятичная строка.

Тесты должны получится такими:
main('0x9c7421314') = '40975081498'
main('0xa47c30bdf') = '25498361886'
main('0x10e55f488') = '44091072530'
main('0xcdaf1fffb') = '68684267543'
У меня получается совершенно другой ответ, не могу найти где ошибка, вот код:
def main(hex_data):
# преобразуем шестнадцатиричные данные в двоичные
bin_data = bin(int(hex_data, 16))[2:].zfill(len(hex_data) * 4)
# разбиваем двоичное представление на отдельные битовые поля
k1 = bin_data[23:26]
k2 = bin_data[27:35]
k4 = bin_data[0:4]
k5 = bin_data[13:17] + bin_data[18:22]
# преобразуем битовые поля в десятичные и объединяем их в одну строку
result = int(k4, 2) + int(k5, 2) * 10000 + int(k1, 2) * 100000000 + int(k2, 2) * 10000000000
return str(result)
print(main('0x9c7421314'))
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Вас, видимо, сбило с толку требование выходной десятичной строки.
def transcode(h:str):
v = int(h, 16)
k1 = v & 0xf
k2 = (v >> 4) & 0x1ff
k4 = (v >> 21) & 0x1f
k5 = (v >> 26) & 0x3ff
d = k4 | (k5 << 13) | (k1 << 23)| (k2 << 27)
return str(d)
print(transcode('0x9c7421314'))
print(transcode('0xa47c30bdf'))
print(transcode('0x10e55f488'))
print(transcode('0xcdaf1fffb'))
*** Remote Interpreter Reinitialized ***
[Dbg]>>>
40975081498
25498361886
44091072530
68684267543