gpt4 book ai didi

python - 将霍夫曼编码字符串转换为二进制

转载 作者:太空宇宙 更新时间:2023-11-04 09:17:31 26 4
gpt4 key购买 nike

我在如何将霍夫曼编码字符串转换为二进制 python 时遇到问题。

这道题不涉及霍夫曼算法。

是这样的:

我可以获得编码的哈夫曼字符串,例如 01010101010注意,是字符串。

但现在我想将字符串表示形式保存为真正的二进制文件。

在哈夫曼编码的字符串中,每一个0和1都是一个字节

我想要的是每个 0 和 1 都是一个

我怎样才能在 python 中做到这一点?

编辑 1:

请原谅我没有足够清楚地描述我的问题。

让我解释一下我目前将 0 和 1 写入二进制的方法。

比方说,我们可以使用代码字符串 s='010101010'。

  1. 我使用 int 将其转换为整数
  2. 然后使用unichr将其转换为字符串,以便我可以将其写入文件
  3. 以二进制方式将字符串写入文件

还要注意,我需要读取文件才能解码霍夫曼代码。

所以我的做法是,

  1. 从文件中读取字节
  2. 将它们恢复为 int
  3. 将 int 转换为其二进制表示字符串。
  4. 解码字符串

第 2 步,问题发生了,我变得毫 headless 绪。

因为一些霍夫曼字符串可以很短(如 10),而有些可以很长(010101010101001)。这导致它们的 int 值中的字节长度不同(一些短字符串可能只占用一个字节,而长字符串可能占用两个甚至更多)

下面的代码说明了我的问题:

ss=['010101','10010101010'] 
# first one is short and takes only one byte in its int value
# second one is long and takes two bytes

print 'write it to file'
with open('binary.bin','wb') as f:
for s in ss:
n=int(s,2)
print n
s=unichr(n)
f.write(s)

print 'read it to file'
with open('binary.bin','rb') as f:
for s in f.read():
print ord(s)

我在第二个 with 部分一次读取一个字节,但这实际上是不正确的。因为字符串 10010101010 占用两个字节。

那么,当我从文件中读取这些字节时,我应该一次读取多少字节?

最佳答案

您可能想使用 Python 中两种不同的“二进制”表示。

比格努姆

一个是“bignum”或任意精度整数。这种类型在 Python 2.x 中称为 long,在 Python 3.x 中称为 int。顾名思义,这种表示在语义上是任意长度的整数,因此如果您计划对结果数字进行算术运算,它会很有用。要解析一串二进制数字,请使用

# Python 2
long(digit_str, 2)

# Python 3
int(digit_str, 2)

位串

或者,正如 Marc B 在评论中所建议的那样,使用 bitstring library .具体来说,对于转换,使用 bitstring.pack function .

对于霍夫曼编码,使用bitstring 可能比将数据存储在byte-string 中更可取,因为霍夫曼编码通常不是8 位的倍数; bitstring 允许您操作任意长度的位串。缺点:bitstring 不是标准库的一部分。

关于python - 将霍夫曼编码字符串转换为二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7225601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com