我需要在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。它只会打印最大尺寸而不是下降到负值。知道怎么做吗?
答案 0 :(得分:0)
最后设法解决问题
unpack("J",hex2bin("eb3dd796efda2409"));
似乎hex2bin搞砸了字节序,所以当我们尝试做J时它会正确解析 谢谢你的帮助!