如何在PHP中将十六进制值转换为有符号整数?

如何在PHP中将十六进制值转换为有符号整数?,php,hex,Php,Hex,我正在尝试将十六进制字符串转换为有符号整数 我可以使用hexdec()轻松地将其转换为无符号值,但这不会给出有符号值 编辑: VB中的代码-两个“AA”十六进制值具有代表性 Dim bs(2) As Byte bs(1) = "AA" bs(2) = "AA" Dim s As Short s = BitConverter.ToInt16(bs, 1) 正如在会议上所说: 该函数现在可以转换值 这对平台来说太大了 整数类型,它将返回值 在这种情况下,则改为浮动 如果你想得到某种大整数(不是浮点

我正在尝试将十六进制字符串转换为有符号整数

我可以使用hexdec()轻松地将其转换为无符号值,但这不会给出有符号值

编辑:

VB中的代码-两个“AA”十六进制值具有代表性

Dim bs(2) As Byte
bs(1) = "AA"
bs(2) = "AA"
Dim s As Short
s = BitConverter.ToInt16(bs, 1)
正如在会议上所说:

该函数现在可以转换值 这对平台来说太大了 整数类型,它将返回值 在这种情况下,则改为浮动

如果你想得到某种大整数(不是浮点数),你需要把它存储在一个字符串中。。。这可能是使用函数实现的

例如,如果您查看hexdec手册页面的注释,您会发现

如果您稍微调整该功能,以避免出现通知,您将得到:

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;
}
输出将是:

string '15406319846273791563' (length=20)
所以,不是你所拥有的那种大浮动;并且似乎符合您的期望:

来自calc.exe的结果= 15406319846273791563


希望这有帮助;-)
是的,PHP文档中的用户注释有时是一座真正的金矿;-)

通过php.net查看以下内容:

hexdec()返回无符号整数。例如,hexdec(“fffffffff e”)返回4294967294,而不是-2。要转换为有符号32位整数,可以执行以下操作:



幸运的是,这个方法还没有处理负数。示例:我们希望echo bchexdec('f8a14564c1d18e58')是
-531066982002225576
,但实际上它返回
179156770917091707326040
类型可以是
q
64位
),而不是
l
32位
),以支持
64位整数
。看见
string '15406319846273791563' (length=20)
<?php
echo reset(unpack("l", pack("l", hexdec("FFFFFFFE"))));
?>