我编写了一个使用霍夫曼编码的简单文本文件压缩器。我对文本进行编码并将 Huffman 生成的二进制文件写入文件。为了解码,我读入二进制文件并逐步遍历霍夫曼树。
那部分很简单。问题出现在 0 和负数上。为了练习/娱乐/学习,我决定做自己的二进制转换方法(从 Java 字节到字符串,反之亦然),我决定通过将最后一位翻转为 1 来表示负数。
例如,-2 = 00000101;
; 2 = 00000100
(额外的 0 用于填充,因为即使是不必要的 0 在 Huffman 中也很重要……不过这无关紧要)
然而,0 = 00000000 = 00000001
这似乎不是问题,但是这两个二进制字符串映射到霍夫曼树中的两个不同字符。
有没有更好的方法来处理二进制中的负数来解决这个问题?