我需要找到一种在javascript中将大数字转换为十六进制字符串的方法。直接蝙蝠,我尝试myBigNumber.toString(16)
,但如果myBigNumber
有一个非常大的值(例如1298925419114529174706173),那么myBigNumber.toString(16)
将返回一个错误的结果,这很棒。我尝试用自己的函数编写如下:
function (integer) {
var result = '';
while (integer) {
result = (integer % 16).toString(16) + result;
integer = Math.floor(integer / 16);
}
}
但是,模数为16的大数都返回0(我认为这个基本问题是toString
导致问题的原因。我也尝试用(integer % 16)
替换(integer - 16 * Math.floor(integer/16))
但是同样的问题。
我还查看了Big Integer Javascript库,但这是一个巨大的插件,希望相对简单的问题。
有关如何获得有效结果的任何想法?也许是某种分而治之的方法?我真的很被困在这里。
答案 0 :(得分:8)
假设您将整数存储为小数字符串,如'1298925419114529174706173'
:
function dec2hex(str){ // .toString(16) only works up to 2^53
var dec = str.toString().split(''), sum = [], hex = [], i, s
while(dec.length){
s = 1 * dec.shift()
for(i = 0; s || i < sum.length; i++){
s += (sum[i] || 0) * 10
sum[i] = s % 16
s = (s - sum[i]) / 16
}
}
while(sum.length){
hex.push(sum.pop().toString(16))
}
return hex.join('')
}
答案 1 :(得分:3)
有问题的数字高于javascript的最大整数。但是,您可以通过字符串处理如此大的数字,并且有一些插件可以帮助您执行此操作。在这种情况下特别有用的一个例子是hex2dec