Javascript - 十六进制字符串到十进制字符串

时间:2014-02-10 00:57:05

标签: javascript string hex decimal

这个问题比最初看起来更复杂 - 虽然在概念上仍然相当简单。

我代表超出javascript最大范围的大数字,作为十六进制数字的字符串(这与node-mysql的bigNumberStrings选项的方法一致)。< / p>

我只是想知道如何将十六进制数字的字符串转换为相同数值的十进制数字的字符串?很明显,这样做很复杂,因为你不能用大数字的javascript做数学。

我已经做了大量的标准解决方案搜索,但我还没有找到。

2 个答案:

答案 0 :(得分:1)

您可以使用bignumber.js

等标准库

的Javascript

var hex = 'ABCDEF1234567890',
    bignumber = new BigNumber(hex, 16);

console.log(bignumber.toString(10));

输出

12379813812177893520 

jsFiddle

答案 1 :(得分:1)

算法本身很简单,所以不需要特殊的库,它实际上可以做你在纸上做的事情,所以效率不是太低。

function hexToDec(s) {
    var i, j, digits = [0], carry;
    for (i = 0; i < s.length; i += 1) {
        carry = parseInt(s.charAt(i), 16);
        for (j = 0; j < digits.length; j += 1) {
            digits[j] = digits[j] * 16 + carry;
            carry = digits[j] / 10 | 0;
            digits[j] %= 10;
        }
        while (carry > 0) {
            digits.push(carry % 10);
            carry = carry / 10 | 0;
        }
    }
    return digits.reverse().join('');
}

工作原理:基本上读取十六进制数字并将它们添加到目前为止计算出的dec值的中间数组中。每个新的十六进制数字意味着十进制数字的数组乘以16,并且所有的余数都分配给更高阶的数字。 while循环它可以添加任何额外的结转作为数组中的新数字。最后一行只是将十进制数字数组转换为字符串。

更新:当然,你可以通过用10的任何其他功率10(100,1000,10000,100000,...)替换数字10来提高算法的效率,它会起作用相同。唯一要求中间值不超过尾数精度(52位)。