PHP - 将十六进制字符串转换为 uint64 和 int64

PHP - Converting Hex string to uint64 and to int64

我需要在 PHP 中将十六进制字符串转换为 int64,它应该使用最后一位作为符号而不是达到最大值。例如:

$hex = "eb3dd796efda2409"

我需要最终结果是

-1495802457948019703

我通过将十六进制转换为 uint64 再转换回 int64,在其他语言 (python / go) 上实现了这个结果。我知道 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。它只会打印最大尺寸而不是下降到负值。知道怎么做吗?

终于解决了问题

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

似乎 hex2bin 弄乱了字节顺序,所以当我们尝试执行 J 时它正确解析 感谢您的帮助!