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 时它正确解析
感谢您的帮助!
我需要在 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 时它正确解析 感谢您的帮助!