如何将 0 和 1 转换为二进制并返回霍夫曼算法?

How to convert 0's and 1's to binary and back for a Huffman algorithm?

目前,我正在编写霍夫曼算法,但我在转换二进制部分时遇到问题。

程序的其余部分已经运行。该程序可以根据符号创建一棵树,并可以创建一个由 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”时,它 returns b'}\x18'。如何将此二进制格式转换回我的 0 和 1?

您可以通过使用两个观察来编写字节到二进制字符串的方法:

  • 您可以使用 str.format 的 b 类型说明符将整数转换为等效的 1 和 0 字符串。
  • bytes 对象在迭代时可以像处理整数列表一样处理。

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