zoukankan      html  css  js  c++  java
  • 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('
    ')
    }
    
    (function () {
        test(11);
        test(62);
        test(999);
        test(Date.now());
    })();

    运行结果为:

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

    16进制:

    const base = '0123456789ABCDEF';

    2进制:

    const base = '01';

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

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

    致读者:感谢你阅读本文,请随手点击右下角的推荐或分享,谢谢!
  • 相关阅读:
    构建之法 团队和流程
    构建之法之个人技术和流程重点介绍
    几种数据库连接
    Ckidt
    hibernate_04_hibernate多对多的关系映射
    hibernate_03_hibernate一对多的关系映射
    hibernate_02_hibernate的入门
    hibernate_01_SSH环境搭建
    SpringBoot_05_ssm拦截器和默认欢迎页面的设置
    SSM14-通过AOP实现日志记录
  • 原文地址:https://www.cnblogs.com/yzeng/p/15079991.html
Copyright © 2011-2022 走看看