实现行程编码

3 language-agnostic compression run-length-encoding

我编写了一个程序来执行行程编码.在典型情况下,如果文本是

AAAAAABBCDEEEEGGHJ
Run Code Online (Sandbox Code Playgroud)

运行长度编码将成为它

A6B2C1D1E4G2H1J1
Run Code Online (Sandbox Code Playgroud)

但它为每个非重复字符添加了额外的1.由于我用它压缩BMP文件,我想到放置一个标记"$"来表示重复字符的出现,(假设图像文件有大量的重复文本).

所以它看起来像

$A6$B2CD$E4$G2HJ
Run Code Online (Sandbox Code Playgroud)

对于当前示例,它的长度是相同的,但BMP文件有明显的区别.现在我的问题在于解码.它发生了一些BMP文件具有模式,$<char><num>$I9在原始文件中,所以在压缩文件中我也包含相同的文本.$I9但是,在解码时,它会将其视为重复的I,重复9次!所以它会产生错误的输出.我想知道的是我可以使用哪个符号来标记重复字符(运行)的开头,以便它不会与原始源冲突.

Blo*_*ard 6

为什么不在压缩文件$中对原始文件$$中的每个进行编码?

和/或使用其他一些字符而不是$- 在bmp文件中使用不多的字符.

另请注意,BMP格式具有"内置"RLE压缩 - 在此处,在页面底部附近 - 在"图像数据和压缩"下.

我不知道你正在使用你的程序,或者它只是用于学习,但如果你使用"官方"bmp方法,你的压缩图像在查看之前不需要解压缩.