Почему я получаю вывод 0 при попытке конвертировать огромное целое число в гекс в php?

Я пытаюсь конвертировать 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;

3

Решение

Это работает.

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

1

Другие решения

Других решений пока нет …