我试图在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
我已在WAMP
和LAMP
上方尝试了上述代码
我安装了最新php
,bcmath
,gmp
。
我做错了什么?
我尝试生成十六进制以使用创建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;
答案 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