js来处理10进制和2进制之间的转换,如果是负数时得到的结果意想不到的,需要特殊处理
转成2进制可能位数不同,所以这里采用补位
var wen = {
//16进制字符串转2进制,如0x0000
sTo2: function(v,l) {
if (v==""){
v="0x0000";
}
let vs=parseInt(v, 16);//字符串转成16进制
return wen.to2(vs,l);//再转成2进制
},
//10进制数字转2进制
to2 : function(v,l){
if (l===undefined || isNaN(l) || (l!=8 && l!=16)){
l=8;
}
if (v===undefined || isNaN(v)){
v=0;
}
let en='';
if (v<0){
en=(v >>> 0).toString(2);
if (en.length>l) {
en=en.substr(en.length-l,l);
}
} else {
en=v.toString(2);
}
//补位
if (en.length<l){
let qz='';
for (let k=0;k<l-en.length;k++){
qz+='0';
}
en=qz+en;
}
return en.split("");
},
//2进行转10进制
to10 : function(v){
let num=v.join("");
return parseInt(num,2);
},
};
使用方式:
let en=wen.to2(-15,16);
console.log("-15=",en);
补充js关于负数的转换:
//直接转换:
(-3).toString(2); //shows "-11"
// 如此得到正确的:
(-3 >>> 0).toString(2); // print "11111111111111111111111111111101"