如何将 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
目前,我正在编写霍夫曼算法,但我在转换二进制部分时遇到问题。
程序的其余部分已经运行。该程序可以根据符号创建一棵树,并可以创建一个由 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