十进制与十六进制的转换
十进制转十六进制
//number.toString(radix);
//radix范围2~36,不写就是十进制
var num = 255;
console.log(num.toString(16));// 十进制转十六进制
console.log(num.toString(16).toUpperCase());// 十进制转十六进制,再转大写
十六进制转十进制
//parseInt(string, radix)
//radix范围2~36,不写就是十进制
var str = "FF";
console.log(parseInt(str, 16));//十六进制转十进制
var str1 = "12";
console.log(parseInt(str1));//字符串转十进制
十进制与二进制的转换
十进制转二进制
var decimalNum = 123;
console.log(decimalNum.toString(2)); // "1111011"
var decimalFloatNumber = 123.125;
console.log(decimalFloatNumber.toString(2)); // "1111011.001" 小数部分也可以直接得到
二进制转十进制
若二进制数只有整数部分,可直接用下列方式进行转换
var str = "1111011";
console.log(parseInt(str, 2)); // "123",二进制转十进制
若二进制数包含小数部分,用上述方法会将小数部分舍弃,因此要将整数部分和小数部分分别进行转换,最后合并为十进制数,方法如下
var binaryFloatNum = 1111011.111;
var binaryFloatNumStr = binaryFloatNum.toString(); //先将二进制数转为字符串
console.log(binaryFloatNumStr); // "1111011.111"
var binaryFloatNumArr = binaryFloatNumStr.split(".");
console.log(binaryFloatNumArr); // ["1111011", "111"] //以小数点为分隔符,获取整数部分和小数部分
var binaryFloatPartStr = binaryFloatNumArr[1]; // "111",binaryFloatPartStr为表示小数部分的字符串
var binaryFloatPartArr = binaryFloatPartStr.split(""); // ["1", "1", "1"],将小数部分的每一位存储在数组中
/**
* 将 binaryFloatPartArr 数组中的每项转换为对应的小数部分的十进制数
* @param decimalArray 二进制小数部分中由小数各位组成的数组
*/
//遍历小数位数组,每一位乘以2的(-index-1)次幂,得到二进制小数位的十进制表示
function eachBinaryFloatPartToDecimal (binaryFloatPartArr) {
return binaryFloatPartArr.map((currentValue, index) => {
return Number(currentValue) * Math.pow(2, (-(index + 1)));
})
}
var eachDecimalFloatPartNum = eachBinaryFloatPartToDecimal(["1", "1", "1"]);
console.log(eachDecimalFloatPartNum); // [0.5, 0.25, 0.125]
/**
* 将 binaryFloatPartArr 数组中的每项转换为对应的小数部分的十进制数
* @param decimalArray 二进制小数部分中由小数各位组成的数组
*/
//将eachDecimalFloatPartNum中的每一项进行累加得到decimalFloatPartNum
var decimalFloatPartNum = eachDecimalFloatPartNum.reduce((accumulator, currentValue) => {return accumulator + currentValue;})
console.log(decimalFloatPartNum); // 0.875
完整代码
/**
* 将二进制小数部分转换为十进制数
* @param binaryFloatPartArr 二进制小数部分中由小数各位组成的数组
*/
function eachBinaryFloatPartToDecimal(binaryFloatPartArr) {
return binaryFloatPartArr.map((currentValue, index) => {
return Number(currentValue) * Math.pow(2, (-(index + 1)))
})
}
/**
* 将二进制小数(包含整数部分和小数部分)转换为十进制数
* @param binaryNum 二进制数(可能是整数,也可能是小数)
*/
function binaryFloatToDecimal(binaryNum) {
// 如果该二进制只有整数部分则直接用 parseInt(string, radix) 处理
if (Number.isInteger(binaryNum)) {
return parseInt(binaryNum, 2);
} else {
var binaryFloatNumArr = binaryNum.toString().split(".");
// 将二进制整数部分转换为十进制数
var binaryIntParStr = binaryFloatNumArr[0];
var decimalIntPartNum = parseInt(binaryIntParStr, 2);
// 将二进制小数部分转换为十进制数
var binaryFloatPartArr = binaryFloatNumArr[1].split("");
var eachDecimalFloatPartNum = eachBinaryFloatPartToDecimal(binaryFloatPartArr);
var deciamlFloatPartNum = eachDecimalFloatPartNum.reduce((accumulator, currentValue) => { return accumulator + currentValue; })
return decimalIntPartNum + deciamlFloatPartNum; //整数部分与小数部分相加得到转换后的十进制小数
}
}
console.log(binaryFloatToDecimal(1111011.111)); // 123.875
console.log(binaryFloatToDecimal(1111011)); // 123
console.log(binaryFloatToDecimal(0.111)); // 0.875
二进制与十六进制的转换
二进制转十六进制
若
十六进制转二进制
若十六进制数不超过13位,可以直接用自带方法,先将十六进制转为十进制再由十进制转为二进制
var hexNum = 125adf8;
var hexStr = hexNum.toString(16); //将十六进制数转为字符串
console.log(parseInt(hexStr,16).toString(2)); // "1001001011010110111111000",先将十六进制数字符串表示转为十进制数,再将十进制数转为二进制数的字符串表示
若十六进制数超过13位,使用上述方法会丢失精度,为了不丢失精度,可使用以下方法
function hex_to_bin(str) {
let hex_array =
[
{key:0,val:"0000"},{key:1,val:"0001"},{key:2,val:"0010"},{key:3,val:"0011"},
{key:4,val:"0100"},{key:5,val:"0101"},{key:6,val:"0110"},{key:7,val:"0111"},
{key:8,val:"1000"},{key:9,val:"1001"},{key:'a',val:"1010"},{key:'b',val:"1011"},
{key:'c',val:"1100"},{key:'d',val:"1101"},{key:'e',val:"1110"},{key:'f',val:"1111"}
]
let value=""
for(let i=0;i<str.length;i++){
for(let j=0;j<hex_array.length;j++){
if(str.charAt(i).toLowerCase()== hex_array[j].key){
value = value.concat(hex_array[j].val)
break
}
}
}
console.log(value)
return value
}
二进制转十六进制
function bin_to_hex(str) {
let hex_array =
[
{key:0,val:"0000"},{key:1,val:"0001"},{key:2,val:"0010"},{key:3,val:"0011"},
{key:4,val:"0100"},{key:5,val:"0101"},{key:6,val:"0110"},{key:7,val:"0111"},
{key:8,val:"1000"},{key:9,val:"1001"},{key:'a',val:"1010"},{key:'b',val:"1011"},
{key:'c',val:"1100"},{key:'d',val:"1101"},{key:'e',val:"1110"},{key:'f',val:"1111"}
]
let value = ''
let list=[]
console.log(str)
if(str.length%4!==0){
let a = "0000"
let b=a.substring(0,4-str.length%4)
str = b.concat(str)
}
console.log(str)
while (str.length > 4) {
list.push(str.substring(0, 4))
str = str.substring(4);
}
list.push(str)
console.log(list)
for(let i=0;i<list.length;i++){
for(let j=0;j<hex_array.length;j++){
if(list[i]==hex_array[j].val){
value = value.concat(hex_array[j].key)
break
}
}
}
console.log(value)
return value
}