如何将数组转换为可能的最短字符串

jul*_*bou 2 javascript base64 hex base

我有以下数组(我正在使用JavaScript):

var arr = [2, 0, 0, 0, 12]
Run Code Online (Sandbox Code Playgroud)

(所述阵列的每个元件可以是间0到15.长度是固定的,5种元素.)

我想将此数组转换为可能的最短字符串.我的实际解决方案是将其转换为十六进制(base16)字符串:

var str = '2000c'
Run Code Online (Sandbox Code Playgroud)

有更好的解决方案吗?(我正在寻找JavaScript解决方案,如果可能的话没有任何库)

Arn*_*uld 6

您的输入是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'
Run Code Online (Sandbox Code Playgroud)

解包函数将使用atob()并重建原始数组,如下所示:

function unpack(packed) {
  var str = atob(packed);
  
  return [
    str.charCodeAt(0) & 0xf,
    str.charCodeAt(0) >> 4,
    str.charCodeAt(1) & 0xf,
    str.charCodeAt(1) >> 4,
    str.charCodeAt(2)
  ];
}

var unpacked = unpack('AgAM');

console.log(unpacked); // output: [ 2, 0, 0, 0, 12 ]
Run Code Online (Sandbox Code Playgroud)