13

JavaScript で大きな数を 16 進文字列に変換する方法を見つける必要があります。すぐに試してみ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 ライブラリも調べましたが、これは 1 つの巨大なプラグインであり、できれば比較的簡単な問題です。

有効な結果を得る方法について何か考えはありますか? たぶん、ある種の分割統治アプローチですか?私は本当にここで立ち往生しています。

4

2 に答える 2

11

整数が次のような 10 進文字列として格納されていると仮定します'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 に答える