VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > JavaScript教程 >
  • 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~!@#$%^&*()_+=-<>,./?';

 

致读者:感谢你阅读本文,请随手点击右下角的推荐或分享,谢谢!
 
出处:https://www.cnblogs.com/yzeng/p/15079991.html

相关教程