有没有办法将250个1和0的JavaScript数组压缩成更易于管理的东西(比如更短的字符串)然后可以自然地解压缩?有点像谷歌做图像编码的方式……
谢谢!
最佳答案
我可以通过编码作为基数32给你几乎1:5的压缩.我选择包含一个简单的长度值,使其允许可变长度.请参阅this fiddle demonstrating the technique,其中包含两个允许您往返值的函数. (或者你可以看到我之前创建的更早,更天真的hexadecimal version @slebetman让我想起了javascript中存在的原生数字库转换.)
原文链接:https://www.f2er.com/js/429660.html这是一组250个1和0的样本输出.字符数不计入前导“250 |”:
base 32,50 chars: 250|qgl6alf1q2lbl1aclau3k5ana2kpals78alek59ilboeglajgu
base 16,63 chars: 250|D42A6555E1D0AABA854CAABC3A155750A995578742AAEA1532AAF0E85553878
您可以使用base 64编码将其缩小到42个字符,但请注意,对于基本32和base 64版本,最终结果中的单词可能会令人反感(请参阅上面的小提示例).十六进制版本也可能有令人反感的内容,但更不如此(一个糟糕的面孔让爸爸成为一个cad?)
如果您需要再保存8个字符,请告诉我,我会为您编写额外的脚本.避免元音可能是处理令人反感的单词问题的一种方法.如果您需要这样做,请告诉我.
如果你的位串总是250个字符,那么函数可以简化一点,但我不想做这个假设.
这里参考的是bit-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;
}
此函数将填充到最接近的5位,并可能在您提供的长度末尾生成一个虚假的额外字符.我包含了每个转换函数的第二个版本,它填充到最接近的10位,这可能会产生最多两个虚假的额外字符.我包括它们是因为如果速度很重要,它们可能(或可能不)更快,因为它们从输入中获取更大的块.