【问题标题】:PHP - Converting Hex string to uint64 and to int64PHP - 将十六进制字符串转换为 uint64 和 int64
【发布时间】:2018-03-15 04:02:26
【问题描述】:

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

【问题讨论】:

  • 您必须先检查符号位(最高有效位)。如果数字是正数,请使用上面的函数进行转换。如果为负数,则执行2's complement conversion,即反转数字(按位),计算其值,然后加 1。

标签: php hex int64 uint64


【解决方案1】:

终于解决了问题

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

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

【讨论】:

    猜你喜欢
    • 2016-08-09
    • 1970-01-01
    • 2020-11-07
    • 2018-08-31
    • 2013-02-07
    • 1970-01-01
    • 2020-10-27
    • 2018-01-31
    相关资源
    最近更新 更多