【发布时间】:2011-09-29 14:18:51
【问题描述】:
我有一个 Web 表单,我想在 Base64 中为其内容生成一个简短的表示。除其他外,该表单包含 264 个二进制值的列表,其中大部分将在任何时候为 0。 (它们代表地理地图上的区域)。即使在 Base64 中,这个 264 位数字也会生成一个长而令人生畏的字符串。我想尽可能高效地实现游程编码。你能帮我解决这个问题吗?我搜索了二进制 RLE,但没有发现任何用处。
到目前为止我已经尝试过什么 - 使用十进制计数和“A”作为分隔符在二进制字符串上运行 RLE,表示 0 和 1 之间的变化,然后将结果从基数 11 转换为以 64 为基数。例如:
00000000001111111000000010000000000000000000000001111111110001111010101000000000000000000000000000000000000111111111110111000000000000111111100000001000000000000000000000000111111111000111101010100000000000000000000000000000000000011111111111011100
变成
10A5A5AA22A7A1A2AAAAAAA34A9AA1A10A5A5AA22A7A1A2AAAAAAA34A9AA1A
又变成了
CNnbr/FxkgbbOw0LNAKgk65P8SdvaTG+t74o
或者,以 62 为基数,
6imo7zq1pqr2mqglTHzXwJRAksm7fvHZHWQK
这更好,但我仍然不禁怀疑我是否做错了什么 - 使用数字“A”作为分隔符是最好的方法吗?
还有另一个更新:
感谢@comingstorm,我将压缩字符串缩短了一些。
ILHHASCAASBYwwccDASYgAEgWDI=
正如我在 cmets 中提到的,实际用例通常会导致字符串更短。
【问题讨论】:
标签: math binary compression run-length-encoding