JS万能进制数与十进制之间转换 2进制、16进制、26进制、62进制等

有些时候我们需要自定义进制数,实现缩短数字长度、加密算法等,本文基于JavaScript语言实现了一套互转方案,支持N进制

我们知道N进制就是使用N个字符来表示不同值

本文示例为数字+大小写字母,共62个字符,实现的62进制,在实际使用时可改变字符串长度实现不同进制

代码如下:

/62进制字符
const base = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
const ben = base.length;

function toBase(num) {
    let arr = [];
    while (num > 0) {
        arr.push(base[num % ben]);
        num = Math.floor(num / ben);
    }
    //数组反转,因为个位在索引0的位置,应反过来显示
    return arr.reverse().join('');

}

function to10(baseNum) {
    baseNum = baseNum.split('').reverse().join('');
    let val = 0;
    for (let i = 0; i < baseNum.length; i++) {
        let c = baseNum[i];
        val += (base.indexOf(c) * Math.pow(ben, i));
    }
    return val;
}

* 以上代码首先定义了进制类型,即该进制使用到的所有字符,并提供两个方法从十进制之间转换及转换为十进制

 

编写测试代码:

function test(val) {
    console.log('十进制:' + val);
    let str = toBase(val);
    console.log(ben + '进制:' + str);
    console.log('转回十进制:' + to10(str));
    console.log('\n')
}

(function () {
    test(11);
    test(62);
    test(999);
    test(Date.now());
})();

 

运行结果为:

 

 

 

我们可以改变进制进行测试,如常用的

16进制:

const base = '0123456789ABCDEF';

 

 

2进制:

const base = '01';

 

 

加上各种字符组成83进制:

const base = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+=-<>,./?';

 

posted @ 2021-07-30 15:48  yzeng  阅读(1095)  评论(0编辑  收藏  举报