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



我正在尝试将big int转换为hexphp

我已经尝试了如何在 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

通常为整数

115792089237316195423570985008687907852837564279074904382605163141518161494336

给十六进制

FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140

更新 1 :

我已经验证了 BCMATH 已安装并加载。

php -m | grep bcmath
bcmath

更新 2:

我试过了

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

0

我尝试了较小的整数

$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;

这有效。

<?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

最新更新