Я пытаюсь конвертировать big int
в hex
в php
Я пробовал это function
от Как конвертировать огромное целое число в гекс в php?
<?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:
по предложению Микетехии
$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
Других решений пока нет …