gpt4 book ai didi

javascript - Javascript 中的位压缩

转载 作者:搜寻专家 更新时间:2023-11-01 04:18:55 27 4
gpt4 key购买 nike

有没有一种方法可以将 250 多个 1 和 0 的 JavaScript 数组压缩成更易于管理的内容(比如更短的字符串),然后以可管理的方式解压缩它们?有点像 Google 进行图像编码的方式......

谢谢!

最佳答案

我可以通过编码为基数 32 为您提供几乎 1:5 的压缩。我选择包含一个简单的长度值以使其允许可变长度。请看this fiddle demonstrating the technique具有两个功能,可让您往返该值。 (或者您可以看到我在@slebetman 之前创建的更早、更天真的 hexadecimal version 让我想起了 javascript 中存在的 native 数字转换。)

这是一组 250 个 1 和 0 的示例输出。字符数不计前导“250|”:

base 32, 50 chars: 250|qgl6alf1q2lbl1aclau3k5ana2kpals78alek59ilboeglajgu
base 16, 63 chars: 250|D42A6555E1D0AABA854CAABC3A155750A995578742AAEA1532AAF0E85553878

您可以使用 base 64 编码将其减少到 42 个字符,但请注意,对于 base 32 和 base 64 版本,您可能会在最终结果中出现令人反感的单词(请参阅 fiddle 以上为示例)。十六进制版本也可能包含令人反感的内容,但更不那么令人反感(一张坏脸预示着父亲是个坏蛋?)

如果您需要再保存 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;
}

此函数将填充到最接近的 5 位,并且可能会在末尾为您提供的长度生成一个虚假的额外字符。我包含了每个转换函数的第二个版本,它填充到最接近的 10 位,这可能会生成最多两个虚假的额外字符。我将它们包括在内是因为如果速度很重要,它们可能(或可能不会)更快,因为它们从输入中获取更大的 block 。

关于javascript - Javascript 中的位压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13408485/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com