这个问题比最初看起来更复杂 - 虽然在概念上仍然相当简单。
我代表超出javascript最大范围的大数字,作为十六进制数字的字符串(这与node-mysql的bigNumberStrings
选项的方法一致)。< / p>
我只是想知道如何将十六进制数字的字符串转换为相同数值的十进制数字的字符串?很明显,这样做很复杂,因为你不能用大数字的javascript做数学。
我已经做了大量的标准解决方案搜索,但我还没有找到。
答案 0 :(得分:1)
您可以使用bignumber.js
等标准库的Javascript
var hex = 'ABCDEF1234567890',
bignumber = new BigNumber(hex, 16);
console.log(bignumber.toString(10));
输出
12379813812177893520
上
答案 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位)。