PHP не имеет отчетов об ошибках для этой функции, он должен был выдать ошибку для целочисленного переполнения, но не повезло. 7fffffff - это наибольшее 32-разрядное целое число со знаком, которое настолько близко, насколько эта функция получится на 32-разрядных платформах.,чтобы правильно преобразовать это число в шестнадцатеричное в 32-битной системе, используйте произвольную библиотеку точности, такую как bcmath или GMP, чтобы вычислить шестнадцатеричное значение, вот 1 из тех, что опубликованы в комментариях "joost at bingopaleis dot com"
function dec2hex($number)
{
$hexvalues = array('0','1','2','3','4','5','6','7',
'8','9','A','B','C','D','E','F');
$hexval = '';
while($number != '0')
{
$hexval = $hexvalues[bcmod($number,'16')].$hexval;
$number = bcdiv($number,'16',0);
}
return $hexval;
}
- для работы требуется расширение bcmath.
также имейте в виду, что число слишком велико, чтобы хранить его как число в 32-битных системах, поэтому вам нужно хранить его как строку.
dec2hex("76561198118533739"); // "1100001096efa6b"
, если bcmath равеннедоступно, может быть, пришло время обновить ваши серверы до 64 бит?