Как преобразовать 0 и 1 в двоичную и обратно для алгоритма Хаффмана? - PullRequest
0 голосов
/ 09 апреля 2019

В настоящее время я пишу алгоритм Хаффмана, но у меня проблема с преобразованием двоичной части.

Остальная часть программы уже работает. Программа может создать дерево из символов и может создать строку из 0 и 1, которые представляют символы. Но теперь я хочу преобразовать эту строку в двоичный формат и снова преобразовать ее. В настоящее время я использую этот код для преобразования строки в двоичный файл.

def toBytes(data):
    b = bytearray()

    for i in range(0, len(data), 8):
        b.append(int(data[i:i+8]), 2)

    return bytes(b)

Я могу преобразовать эту строку в двоичный формат, но не могу преобразовать ее обратно. Например, когда я вставляю «01111101011000» в функцию, она возвращает b '} \ x18'. Как я могу преобразовать этот двоичный формат обратно в мои 0 и 1?

1 Ответ

0 голосов
/ 09 апреля 2019

Вы можете написать метод bytes-to-binarylike-string, используя два наблюдения:

  • Вы можете использовать спецификатор типа b в str.format, чтобы превратить целое число в эквивалентную строкуединиц и нулей.
  • Объект bytes может обрабатываться как список целых чисел, когда вы перебираете его.

>>> def to_bin(b):
...     return "".join("{:08b}".format(x) for x in b)
...
>>> b = b'}\x18'
>>> print(to_bin(b))
0111110100011000
...