Преобразование шестнадцатеричной строки в uint64 и в int64

Мне нужно преобразовать шестнадцатеричную строку в int64 в PHP, и он должен использовать последний бит в качестве знака вместо достижения максимума. Например:

$hex = "eb3dd796efda2409"

и мне нужен конечный результат, чтобы быть

-1495802457948019703

Я достигаю этого результата на других языках (python / go), конвертируя hex в uint64 и обратно в int64. Я знаю, что PHP не может делать unsigned 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. Он просто напечатает максимальный размер вместо того, чтобы упасть до отрицательного значения. есть идеи как это сделать?

1

Решение

Наконец-то удалось решить проблему

unpack("J",hex2bin("eb3dd796efda2409"));

кажется, hex2bin испортил порядок байтов, поэтому, когда мы попытались сделать J, он решает правильно
Спасибо за помощь!

0

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

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

По вопросам рекламы [email protected]