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