Реализовать функцию для транскодирования данных, содержащих битовые поля

Рейтинг: 0Ответов: 1Опубликовано: 28.04.2023

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

Входные данные: Шестнадцатиричная строка. введите сюда описание изображения

Выходные данные: Десятичная строка. введите сюда описание изображения

Тесты должны получится такими:

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'))

Ответы

▲ 2

Вас, видимо, сбило с толку требование выходной десятичной строки.

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