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"

作者 赵文明

发表回复