可能重复:
需要有关如何使用霍夫曼代码对单词进行编码的帮助
假设我有以下霍夫曼编码符号
A - 0 B - 10 C - 110 D - 111 并且您要对序列进行编码
ABAACDADBB 然后我得到这样的二进制代码:01000110 11101111 010
(01000110) = 0x46 (11101111) = 0xEF
010=???? 如果此代码中没有 010,我可以将这些字节保存到文件中。现在我应该如何处理这个010?保存为 00000010?那是行不通的。
可能重复:
需要有关如何使用霍夫曼代码对单词进行编码的帮助
假设我有以下霍夫曼编码符号
A - 0 B - 10 C - 110 D - 111 并且您要对序列进行编码
ABAACDADBB 然后我得到这样的二进制代码:01000110 11101111 010
(01000110) = 0x46 (11101111) = 0xEF
010=???? 如果此代码中没有 010,我可以将这些字节保存到文件中。现在我应该如何处理这个010?保存为 00000010?那是行不通的。
您将需要一些编码数据的标头(一个字节就足够了,但您可能需要更多,具体取决于您实际需要的内容),并且您可以在最后一个数据字节中存储多少填充位。因此,在您的示例中,010
您的标头字节将包含5
,因为您需要忽略的最后一个字节的末尾有 5 位。
查找存储在实际有用的位中的值是您需要逐位处理的事情,因为您可能有重叠的代码,其中代码可能被分成两个字节 - 所以有些位可能在字节上N
,而有些位可能重叠到 byte 上N+1
。
您可以包含一个标记您已完成的结束字节,然后可能还有另一个字节表示在最后一个数据字节中存储了多少项目。然后,您可以通过知道有多少位实际上是重要的,从最后一个字节中挑选出剩余的字符。