Мне нужно преобразовать шестнадцатеричную строку в int64 в PHP, и она должна использовать последний бит в качестве знака вместо достижения максимального значения. Например:
$hex = "eb3dd796efda2409"
и мне нужно, чтобы конечный результат был
-1495802457948019703
Я достигаю этого результата на других языках (python/go), преобразовывая шестнадцатеричный код в uint64 и обратно в int64. Я знаю, что PHP не может явно использовать int64 без знака.
Я нашел эту функцию, используя bcmath, которая правильно преобразует шестнадцатеричный код в строку uint64.
function bchexdec($hex)
{
$dec = 0;
$len = strlen($hex);
for ($i = 1; $i <= $len; $i++)
$dec = bcadd($dec, bcmul(strval(hexdec($hex[$i - 1])), bcpow('16', strval($len - $i))));
return $dec;
}
Но я не могу преобразовать строку uint64 в int64. Он просто напечатает максимальный размер вместо того, чтобы упасть до отрицательного значения. есть идеи как это сделать?