我是逆向工程的东西,我经常偶然发现各种解压缩算法。大多数时候,它的LZSS就像维基百科所描述的那样:
- 初始化大小为2 ^ n
的字典- 虽然输出小于已知输出大小:
醇>
- 阅读标志
- 如果设置了标志,则输出文字字节(并将其附加在字典的末尾)
- 如果未设置标志:
- 阅读长度,查看位置
- 将长度字节从查看位置后的字典转录到输出和字典末尾。
问题在于实现遵循两个如何编码标志的学校。第一个将输入视为位序列:
- (...)
醇>
- 将标志作为一位
读取- 如果已设置,则将文字字节读为8个未对齐位
- 如果未设置,请将长度和位置读取为 n 和 m 未对齐位
这涉及许多位移操作。
另一个通过仅对 flag 存储使用按位操作来节省一点CPU时间,而文字字节,长度和位置则从对齐的输入字节派生。为实现此目的,它通过提前获取一些标志来打破线性。所以算法修改如下:
- (...)
醇>
- 通过读取一个字节一次读取8个标志。对于这8个标志中的每一个:
- 如果已设置,则将文字读作对齐字节
- 如果未设置,则将长度和位置读取为对齐字节(从获取的字节中获取特定值涉及一些位操作,但它没有第一个版本那么昂贵。)
我的问题是:这些都是有效的LZSS实现,还是我确定这些算法错了?他们有没有已知的名字?