用javascript自己寫一個進制轉換小工具

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}`);

進制轉換小工具

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章