Bash decimal to base 62 conversion

Ram*_*Ram 10 bash shell base-conversion bc

我想反转以下bash命令执行的操作:

$ echo $((62#a39qrT))
9207903953
Run Code Online (Sandbox Code Playgroud)

即将十进制9207903953转换为基数62,保持bash标准{0..9},{a..z},{A..Z}.

我知道我可以通过使用来实现这一点bc,但我必须手动转换每个字符.例如,我目前这样做:

BASE62=($(echo {0..9} {a..z} {A..Z}))
for i in $(echo "obase=62; 9207903953" | bc)
do
    echo -n ${BASE62[$i]} #Doesn't work if bc's output contains leading zeroes
done
Run Code Online (Sandbox Code Playgroud)

必须有一种方法以较少"黑客"的方式做到这一点.你知道如何更有效地做到这一点吗?

编辑:更改bc输入.

Rub*_*ens 11

我真的非常感谢你提出的解决方案,而且我认为没有办法直接使用bash.这是你错过的一点:

BASE62=($(echo {0..9} {a..z} {A..Z}))
for i in $(bc <<< "obase=62; 9207903953"); do
    echo -n ${BASE62[$(( 10#$i ))]}
done && echo
Run Code Online (Sandbox Code Playgroud)

输出:

a39qrT
Run Code Online (Sandbox Code Playgroud)

  • 关键是要使用$$((10#$ i))消除前导零并以10为基数。这里的字符串$(bc &lt;&lt;&lt;“ ...”)很好,但不是强制性的。 (2认同)
  • 这是对称的base62解码函数:`function base62_decode(){echo $((62#$ 1))}` (2认同)