gpt4 book ai didi

javascript - 无论如何,在 JavaScript 中将字符串压缩为更小的字符串?并使其可逆?

转载 作者:行者123 更新时间:2023-12-03 02:11:35 25 4
gpt4 key购买 nike

我有以下字符串:

SigV1i8njyrAGrbAfHRNdM3fmEu3kd7keGsqTTDG3Wt3tXqT153eFya2JsEigrK7Pjmh6HhEQLp5bmNXyeHsKNELW7cD3

是否有 JavaScript 字符串压缩函数可以以某种方式缩短此长度?

我还需要一种方法将其提取回原始字符串状态。

最佳答案

这个想法是将可用的 base62 字符串转换为更高基数的字符串。这样您就可以节省空间。但在普通 JS(或使用 Jquery)中执行此操作很困难,因为 JS 不能很好地处理大数字。在外部库 bigint.js 的帮助下,这是可能的。您可以测试一下 here 。这段代码不是我写的,但是非常有用:

var base_symbols = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~`!@#$%^&*()-_=+[{]}\\|;:'\",<.>/?¿¡";

function baseConvert(src, from_base, to_base, src_symbol_table, dest_symbol_table) {
// From: convert.js: http://rot47.net/_js/convert.js
// Modified by MLM to work with BigInteger: https://github.com/peterolson/BigInteger.js

src_symbol_table = src_symbol_table ? src_symbol_table : base_symbols;
dest_symbol_table = dest_symbol_table ? dest_symbol_table : src_symbol_table;

if(from_base > src_symbol_table.length || to_base > dest_symbol_table.length) {
console.warn("Can't convert", src, "to base", to_base, "greater than symbol table length. src-table:", src_symbol_table.length, "dest-table:", dest_symbol_table.length);
return false;
}

var val = bigInt(0);
for(var i = 0; i < src.length; i ++) {
val = val.multiply(from_base).add(src_symbol_table.indexOf(src.charAt(i)));
}
if(val.lesser(0)) {
return 0;
}

var r = val.mod(to_base);
var res = dest_symbol_table.charAt(r);
var q = val.divide(to_base);
while(!q.equals(0)) {
r = q.mod(to_base);
q = q.divide(to_base);
res = dest_symbol_table.charAt(r) + res;
}

return res;
}

var input = 'SigV1i8njyrAGrbAfHRNdM3fmEu3kd7keGsqTTDG3Wt3tXqT153eFya2JsEigrK7Pjmh6HhEQLp5bmNXyeHsKNELW7cD3';
var a = baseConvert(input, 62, 80);
baseConvert(a, 80, 62);

结果输出将 94 个字符转换为 82 个字符:

SigV1i8njyrAGrbAfHRNdM3fmEu3kd7keGsqTTDG3Wt3tXqT153eFya2JsEigrK7Pjmh6HhEQLp5bmNXyeHsKNELW7cD3 
$sIn3@WAto¿rf<zVn"+:Pkgq;&x.fciVZC7O)`0ii+sf/\X¿CM9Ad!0Z^q?t6uK=w}S8=JZhboIHd'fY\]Qf
SigV1i8njyrAGrbAfHRNdM3fmEu3kd7keGsqTTDG3Wt3tXqT153eFya2JsEigrK7Pjmh6HhEQLp5bmNXyeHsKNELW7cD3

要获得更好的压缩效果,只需更改 base_symbols 以包含更多字符,然后将输入转换为更高的基数。

关于javascript - 无论如何,在 JavaScript 中将字符串压缩为更小的字符串?并使其可逆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49541184/

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