有些时候我们需要自定义进制数,实现缩短数字长度、加密算法等,本文基于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~!@#$%^&*()_+=-<>,./?';