我有一个程序,我生成比特流,大约80到150位左右,我想压缩,因为我要把它们变成某种ASCII字符串,以便人们可以传输它们.
有没有人知道一个好的,免费的位识别压缩器可能在这样的流上工作?我对"标准选项"的主要问题是这个流应该被视为位而不是字节,否则结构会丢失,并且它们的开销会增加任何增益.
加成:
我想压缩这些流的原因是因为用户将要切割+粘贴它们,可能使用类似base64编码的东西,因此保存一些数据是有帮助的.
下面是一个例子,对于那些希望看到它谁.我将添加格式以便于阅读:
110 110 - This is a 6x6 grid (the maximum is 7x7, so we only need 3 bits!)
000000
011110
010010
010010
011110
000000 - This is one layout grid
000000
000000
001000
000100
000000
000000 - This is the second layout grid
Run Code Online (Sandbox Code Playgroud)
现在我们列出一些作品
010 11111111 - A piece is a 3-bit colour code, then an 8-bit list of 'on / off' bits.
001 10101010 - Another bit!
001 10101010 - Another, identical bit!
Run Code Online (Sandbox Code Playgroud)
我之所以这么说它应该被视为'比特',当被视为比特流(特别是'网格中通常很多0)时,存在明显的压缩选项,当你将其视为字节流时,它会消失.
克里斯,感谢您发布这些样本。我认为游程编码是你想要的方式。实施起来应该非常简单。
http://en.wikipedia.org/wiki/Run-length_encoding
可以很好地处理所有连续的 0。
那么压缩这些字符串的主要原因是为了让它们更容易剪切和粘贴?说得通; 这听起来是一个有趣的项目。
如果您只是想让字符串更易于管理,那么听起来您已经准备好了。如果您尝试压缩它们,以便它们通过网络传输得更快,我认为压缩小字符串的好处可能会被其他 TCP 问题(例如 MTU 大小等)所抵消。(我没有这方面的经验,所以最后一点要持保留态度)
祝你好运!