JavaScript:十六进制到十进制转换器错误

时间:2017-04-04 01:17:24

标签: javascript hex decimal

我一直在制作一个自定义函数,用于将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 ...

2 个答案:

答案 0 :(得分:4)

以下内置函数将为您进行转换:

dec = parseInt('0x' + hexstr,16);

请确保要转换的数字小于最大安全JavaScript整数:
(2 ^ 53 - 1)= 0x1fffffffffffff = 9007199254740991。

如果您需要使用更大的数字,请查看以下代码: https://codegolf.stackexchange.com/questions/1620/arbitrary-base-conversion
我没有写,所以不要让我解释它

答案 1 :(得分:1)

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

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

是一个人,应该是:

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