用Javascript将大整数转换为十六进制字符串

Convert A Large Integer To a Hex String In Javascript

本文关键字:十六进制 字符串 转换 整数 Javascript      更新时间:2023-09-26

我需要找到一种方法,用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 * Math.floor(integer/16))替换(integer % 16),但也有同样的问题。

我也看过Big Integer Javascript库,但这是一个巨大的插件,希望是相对简单的问题。

有没有想过如何才能得到一个有效的结果?也许是某种分而治之的方法?我真的很困在这里。

假设您的整数存储为十进制字符串,如'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('')
}

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

我采用的方法是使用bignumber.js库并创建一个以字符串形式传入值的BigNumber,然后只使用toString转换为十六进制:

  const BigNumber = require('bignumber.js');
  const lrgIntStr = '1298925419114529174706173';
  const bn = new BigNumber(lrgIntStr);
  const hex = bn.toString(16);