js的進制轉換, 分爲2進制,8進制,10進制,16進制之間的相互轉換, 我們直接利用對象.toString()即可實現:
//10進制轉爲16進制
(10).toString(16) // =>"a"
//8進制轉爲16進制
(012).toString(16) // =>"a"
//16進制轉爲10進制
(0x16).toString(10) // =>"22"
//16進制轉爲8進制
(0x16).toString(8) // =>"26"
//10進制轉爲2進制 //=>
(1111).toString(2) // => "10001010111"
//8進制轉爲2進制 //=>
(01111).toString(2) //=>"1001001001"
//16進制轉爲2進制 //=>
(0x16).toString(2) // => "10110"
如果是其它進制轉10進制,則需要用paresInt這個方法:
//2進制到10進制;
parseInt(10,2) //=>2
//2進制到10進制;
parseInt(100,2) //=>4
//16進制到10進制
parseInt(12, 16) //=>18
//8進制到10進制
parseInt(12,8); //=>10
這樣顯得頗爲麻煩,爲此我封裝了一個函數,可以自由的實現進制轉換:
/**
* 進制轉換函數
* @param string num 待轉換的進制數,如 110(二進制),26(八進制),10(十進制),AF(十六進制)
* @param Interger from 源進制 2|8|10|16
* @param Interger to 目標進制 2|8|10|16
* @return 轉換結果
*/
function convert(num,from,to){
var pattern=/^(2|8|10|16){1}$/;
if(!pattern.test(from)||!pattern.test(to)){
console.error('源進制from和目標進制to必須都爲[2,8,10,16]其中的數字');
return;
}
//如果源進製爲十進制
if(from==10){
return parseInt(num).toString(to);
}
//如果目標進制是十進制
if(to==10){
return parseInt(num,from);
}
//其他進制的轉換
return parseInt(num,from).toString(to);
}
效果:
alert(convert(10,10,2)); // 十進制轉成二進制,1010
alert(convert(11,10,16)); // 十進制轉成十六進制,b
alert(convert(1111,2,16)); // 二進制轉成十六進制,f