13

我需要找到一种将大数字转换为 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 库,但这是一个巨大的插件,希望是相对简单的问题。

关于如何获得有效结果的任何想法?也许某种分而治之的方法?我真的很困在这里。

4

2 回答 2

11

假设您将整数存储为十进制字符串,例如'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('')
}
于 2014-02-10T02:51:47.690 回答
3

有问题的数字高于 javascript 的最大整数。但是,您可以通过字符串处理如此大的数字,并且有一些插件可以帮助您做到这一点。在这种情况下特别有用的一个例子是hex2dec

于 2013-10-04T00:29:54.107 回答