用javascript自己写一个进制转换小工具

52次阅读

共计 1880 个字符,预计需要花费 5 分钟才能阅读完成。

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,最后一个字符~ 对应数值 63
const 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}`);

进制转换小工具

正文完
 0