RLE编码位序列,而不是字节

时间:2015-09-03 15:26:25

标签: compression

我需要为二进制数据实现压缩算法,这需要在嵌入式受限设备上工作(256kB ROM,48 KB RAM)。

我正在考虑使用RLE压缩算法。除非从头开始实现,否则我发现了很多C实现(例如:http://sourceforge.net/projects/bcl/?source=typ_redirect),但它们在字节序列上应用RLE算法(字典的单词是1到255,即8位编码。

我找到一种实现,从字节序列开始,在对应于输入(0和1)的位序列上应用RLE编码。请注意,另一种算法也可以工作(我需要一个<0.9的压缩比,所以我认为任何算法都可以这样做),但实现需要基于位而不是字节。

任何人都可以帮助我吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你可以编码0,1,2,3,255 ......等字节(其中有0和1)

让我们对这个位序列进行编码: 000000011111110 1.如果位与最后一位进行比较,则移位并递增计数器 2.如果NOT-移位111到输出缓冲器并在位序列之前写入控制位1 3.如果无法打包位 - 写入0位和其余数据 输出: 111101110100

要解压缩只需移位第一个控制位: 如果为0 - 将下一位写入输出缓冲区 如果1 - 读取3位(可以是其他长度)并将它们转换为十进制数。移位下一位,这将意味着要重复的位和开始循环以表示原始序列

但是这种压缩方法只适用于有大量0和255字节(二进制为00000000和11111111)的文件,例如黑色或白色背景的BMP文件。

希望我帮助过你!