为什么我尝试在php中将一个巨大的整数转换为十六进制时获得输出0?

时间:2017-08-22 04:35:55

标签: php hex biginteger

我试图在big int

中将hex转换为php

我在How to convert a huge integer to hex in php?

尝试了此function
<?php

function bcdechex($dec) {
    $hex = '';
    do {    
        $last = bcmod($dec, 16);
        $hex = dechex($last).$hex;
        $dec = bcdiv(bcsub($dec, $last), 16);
    } while($dec>0);
    return $hex;
}

$int = 115792089237316195423570985008687907852837564279074904382605163141518161494336 ;

$int_to_hex = strtoupper( bcdechex ( $int )) ;
echo $int_to_hex ;

它将输出设为0

我已在WAMPLAMP上方尝试了上述代码 我安装了最新phpbcmathgmp

我做错了什么?

我尝试生成十六进制以使用创建bitcoin address

通常是int

115792089237316195423570985008687907852837564279074904382605163141518161494336

给出HEX

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140

更新1:

我已经确认已安装并加载了bcmath。

php -m | grep bcmath
bcmath

更新2:

我试过

$int = 115792089237316195423570985008687907852837564279074904382605163141518161494336 ;
echo dechex($int);

给出

0

我尝试过较小的int

$int = 556 ;
echo dechex($int);

给出

22c

更新3: 正如Mikethetechy所建议的

$int = 123456789 ;
echo dechex($int);

75bcd15

$int = "123456789" ;
echo dechex($int);

75bcd15

更新4:

问题通过将big int放入quotes

来解决

即。使用

$int = '115792089237316195423570985008687907852837564279074904382605163141518161494336';

而不是

$int = 115792089237316195423570985008687907852837564279074904382605163141518161494336;

1 个答案:

答案 0 :(得分:1)

这很有效。

<?php

function bcdechex($dec) {
    $hex = '';
    do {    
        $last = bcmod($dec, 16);
        $hex = dechex($last).$hex;
        $dec = bcdiv(bcsub($dec, $last), 16);
    } while($dec>0);
    return $hex;
}

$int = '115792089237316195423570985008687907852837564279074904382605163141518161494336';

$int_to_hex = strtoupper( bcdechex ( $int )) ;
echo $int_to_hex ;

可以使用任意精度进行谷歌搜索。您的系统将根据硬件和环境设置对浮点数和整数值进行限制。我已经将gmp用于这样的事情 - 想法是你使用资源,串起任何东西并用它来代表它。 bc函数也期望字符串!该函数将字符串分开,操作它,然后连接结果以形成输出。

好看的可能是:https://github.com/phpseclib/phpseclib/blob/master/phpseclib/Math/BigInteger.php