JavaScript进制转换

JavaScript本身自带进制转换功能,支持2-36进制的转换

// 注意,不能直接使用 11.toString(16); 因为数字后面小数点后面会被识别成小数点的点
Number(11).toString(16); // 将十进制的11转换成16进制,结果是b
parseInt('b', 16); // 将16进制的b转换成10进制,结果是11

Number(38).toString(36); // 将十进制的38转换成36进制,结果是12
parseInt(12, 36); // 将36进制的12转换成10进制,结果是38

Number(27).toString(2); // 将十进制的27转换成2进制,结果是11011
parseInt("11011", 2); 、// 将二进制的11011转换成10进制,结果是27

但是如果要写超过36进制的进制转换,js就不支持了

自己写了一个进制转换工具,可自定义字符对应关系

/** * 十进制和其他进制的相互转换 */class MyNumberConvertion{    constructor(chars) {        this.chars = chars;        this.RADIX = chars.length;        this.map = new Map();        for(let i = 0; i < this.RADIX; i++) {            this.map.set(chars[i], i);        }    }    /**     * 将十进制数字转换成指定进制     * @param {Number, String} num      */    transfer(num) {        let a = +num; //把字符串变成数字        let arr = [];        if(a === 0) {            arr.push('0');        }        const RADIX = this.RADIX;        while(a > 0) {            arr.unshift(this.chars[a % RADIX]);            a = parseInt(a / RADIX);        }        return arr.join('');    }    /**     * 将字符串还原成指定进制     * @param {String} str      */    revert(str) {        let num = 0;        let len = str.length;        let RADIX = this.RADIX;        for(let i = 0; i < len; i++) {            let a = this.map.get(str[i]);            num += a * Math.pow(RADIX, len - i - 1);        }        return num;    }}

示例如下:

console.log('64进制');//初始化的字符串,字符串长度就是进制,从左到右,0对应数值0,最后一个字符~对应数值63const chars64 = '0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ-~';//初始化转换器const convertion64 = new MyNumberConvertion(chars64);let str64 = '445306828';let num64 = convertion64.transfer(str64);//将数字转换成64进制let source64 = convertion64.revert(num64);//将64进制字符还原成原始数据console.log(`原始数据:${str64}`);console.log(`转换后:${num64}`)console.log(`还原后:${source64}`);console.log('2进制');const convertion2 = new MyNumberConvertion('01');let str2 = 15;let num2 = convertion2.transfer(str2);let source2 = convertion2.revert(num2);console.log(`原始数据:${str2}`);console.log(`转换后:${num2}`)console.log(`还原后:${source2}`);console.log('8进制');const convertion8 = new MyNumberConvertion('01234567');let str8 = 39;let num8 = convertion8.transfer(str8);let source8 = convertion8.revert(num8);console.log(`原始数据:${str8}`);console.log(`转换后:${num8}`)console.log(`还原后:${source8}`);

进制转换小工具