// 注意,不能直接使用 11.toString(16); 由於數字後面小數點後面會被識別成小數點的點
Number(11).toString(16); // 將十進制的11轉換成16進制,結果是b
parseInt('b', 16); // 將16進制的b轉換成10進制,結果是11git
Number(38).toString(36); // 將十進制的38轉換成36進制,結果是12
parseInt(12, 36); // 將36進制的12轉換成10進制,結果是38github
Number(27).toString(2); // 將十進制的27轉換成2進制,結果是11011
parseInt("11011", 2); 、// 將二進制的11011轉換成10進制,結果是27工具
/** * 十進制和其餘進制的相互轉換 */ 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; } }
示例以下:this
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}`);
進制轉換小工具code