如何将数组转换为可能的最短字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将数组转换为可能的最短字符串相关的知识,希望对你有一定的参考价值。
我有以下数组(我正在使用javascript):
var arr = [2, 0, 0, 0, 12]
(数组的每个元素可以在0
到15
之间。长度是固定的,5个元素。)
我想将此数组转换为可能的最短字符串。我的实际解决方案是将其转换为十六进制(base16)字符串:
var str = '2000c'
有更好的解决方案吗? (我正在寻找JavaScript解决方案,如果可能的话没有任何库)
答案
您的输入是5 * 4位= 20位。您可以将数组重新编码为3个字符的字符串(24位,实际有效负载为20位),并使用btoa()对其进行编码,以生成4个字符的可打印字符串。
function pack(arr) {
return btoa(
String.fromCharCode(
(arr[1] << 4) | arr[0],
(arr[3] << 4) | arr[2],
arr[4]
)
);
}
var packed = pack([2, 0, 0, 0, 12]);
console.log(packed); // output: 'AgAM'
另一答案
您可以使用toString(base)
将基数为10的数字转换为您所需的基数。例如,十六进制(基数为16)
function encode(input){
var encoded = input.map(function(num){
return num.toString(16);
}).join('');
return encoded;
}
输出:
>
encode([2,0,0,0,12]);'2000C'
以上是关于如何将数组转换为可能的最短字符串的主要内容,如果未能解决你的问题,请参考以下文章
在给定列表中搜索将字符串转换为另一个字符串的最短方法,一次一个字符