请教一个字符串合并压缩的算法。

需求是这样的,一个6位长度的时间字符串(193025,即晚上7点30分25秒),然后和一个4位长度的字符串(“ABCD”),把这两个字符串“相加”生成一个新的、可逆向分解开的6位(最长6位,可以更短)字符串。

这两个字符串都是变化、不同的。

因为目前老接口只支持6位的字符串做参数,我想一次传递多个参数过去,所以要这样处理一下。

求思路,实现语言不限。谢谢~

阅读 3.2k
4 个回答

193025ABDE每两位做一个映射,比如说前6位每两位转换为一个60进制的符号,然后后2位每两位转换成一个676进制的符号,然后服务器端解码。

比较无聊,写了个简单的,每两位转换为一个字符

var origin = "193025ABDE";
var encode = m=>String.fromCharCode(parseInt(m, 36));//转换为36进制后使用unicode编码
var decode = m=>m.charCodeAt(0).toString(36);//取unicode代码后转换为36进制字符串
var encoded = origin.replace(/.{2}/g, encode);//每两位一处理
var decoded = encoded.replace(/./g, decode);

可以把时间字符串换算成秒数,最大86400位,平方根是294,因为是字符串所以可以取294个任意字符作为前两位,计算的时候294*a+b就可以了,不过需要把那个字符代表几记录一下,干脆用unicode从0开始好了。
大概是这么个思路,主要的出发点是字符串每位可以表达的信息量是很大的。

。。 我都说了要一次传多个参数。分两次就不折腾了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题