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 @   yzeng  阅读(1305)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示