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

时间:2018-03-15 04:02:27

标签: php hex int64 uint64

我需要在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。它只会打印最大尺寸而不是下降到负值。知道怎么做吗?

1 个答案:

答案 0 :(得分:0)

最后设法解决问题

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

似乎hex2bin搞砸了字节序,所以当我们尝试做J时它会正确解析 谢谢你的帮助!