我一直在做一个自定义函数,用于将scratch project中的十六进制转换为十进制:

function Hex2Decimal(hex){
    var deci = 0;
    var num = 1;
    var hexstr = String(hex);
    hexstr = hexstr.toLowerCase();
    var expon = 0;
    for(var i = 0; i < hex.length; i++){
        expon = Math.pow(16,hexstr.length - (num+1));
        if(hexstr[num+1] === "a"){
            deci = (10*expon)+deci;
        }else if(hexstr[num-1] === "b"){
            deci = (11*expon)+deci;
        }else if(hexstr[num-1] === "c"){
            deci = (12*expon)+deci;
        }else if(hexstr[num-1] === "d"){
            deci = (13*expon)+deci;
        }else if(hexstr[num-1] === "e"){
            deci = (14*expon)+deci;
        }else if(hexstr[num-1] === "f"){
            deci = (15*expon)+deci;
        }else if(hexstr[num-1] != "undefined"){
            deci = (Number(hexstr[num-1])*expon)+deci;
        }
        num = num + 1;
    }
    return deci;
}


但是当我在其中输入“ BC324240”时,它将返回值“ 197338148”而不是“ 3157410368”。
将值转换回十六进制时,得到“ BC32424”。由于某种原因,我需要帮助发现,其中的“ 0”被完全“忽略”。
还注意到使用'10'返回1 ...

最佳答案

您错过了最后一个位置(该数字应乘以16 ^ 0),因为您的通话是:

expon = Math.pow(16, hexstr.length - (num+1));


相差一个,应该是:

expon = Math.pow(16, hexstr.length - num);

10-04 22:22
查看更多