Rio*_*Rio 5 javascript compression encoding
有没有办法将250 + 1和0的JavaScript数组压缩成更易于管理的东西(比如更短的字符串)然后可以自然地解压缩?有点像谷歌做图像编码的方式......
谢谢!
我可以通过编码为基数 32 为您提供几乎 1:5 的压缩。我选择包含一个简单的长度值以使其允许可变长度。请参阅此小提琴演示了具有两个函数的技术,这些函数允许您往返该值。(或者你可以看到我在 @slebetman 提醒我 javascript 中存在的本机数字基数转换之前创建的一个更早、更幼稚的十六进制版本。)
以下是一组 250 个 1 和 0 的输出示例。字符数不包括前导“250|”:
base 32, 50 chars: 250|qgl6alf1q2lbl1aclau3k5ana2kpals78alek59ilboeglajgu
base 16, 63 chars: 250|D42A6555E1D0AABA854CAABC3A155750A995578742AAEA1532AAF0E85553878
Run Code Online (Sandbox Code Playgroud)
您可以使用 Base 64 编码将其减少到 42 个字符,但请注意,使用 Base 32 和 Base 64 版本,最终结果中可能会出现令人反感的单词(请参阅上面的小提琴以了解例子)。十六进制版本也可能包含令人反感的内容,但更不用说(一张坏脸让爸爸成为一个无赖?)
如果您需要再保存 8 个角色,请告诉我,我将为您编写额外的脚本。避免元音可能是解决令人反感的单词问题的一种方法。如果您也需要这样做,请告诉我。
如果你的位串总是250个字符,那么函数可以稍微简化,但我不想做这个假设。
作为参考,这里有“bits-to-base-32”函数。
function bitstringEncode(bitstring) {
var i, l = bitstring.length,
retval = l.toString() + '|';
for (i = 0; i < l; i += 5) {
retval += parseInt((bitstring.substr(i, 5) + '0000').substr(0, 5), 2).toString(32);
}
return retval;
}
Run Code Online (Sandbox Code Playgroud)
此函数将填充到最接近的 5 位,并且可能会在您提供的长度末尾生成一个虚假的额外字符。我包含了每个转换函数的第二个版本,它填充到最接近的 10 位,这可能会生成最多两个虚假的额外字符。我将它们包括在内是因为如果速度很重要,它们可能(或可能不会)更快,因为它们从输入中获取更大的块。
归档时间: |
|
查看次数: |
1961 次 |
最近记录: |