unsigned int在php中签名

Thi*_*ker 5 php math absolute-value

看来,在32位OS中ip2long返回signed int,在64位OS中返回unsigned int.

我的应用程序正在处理10台服务器,有些是32位,有些是64位,所以我需要它们以同样的方式工作.

在PHP文档中有一个技巧可以使结果始终无符号,但由于我的数据库已经充满了数据,我想让它签名.

那么如何在PHP中将unsigned int更改为已签名的int?

Pau*_*xon 15

PHP不支持无符号整数作为类型,但是你可以做的只是将ip2long的结果转换为unsigned int 字符串,方法是让sprintf将值解释为unsigned %u:

 $ip="128.1.2.3";
 $signed=ip2long($ip);             // -2147417597 in this example
 $unsigned=sprintf("%u", $signed); //  2147549699 in this example
Run Code Online (Sandbox Code Playgroud)

编辑,因为你真的希望它甚至在64位系统上进行签名 - 这里是你如何将64位+ ve值转换为32位签名的等价物:

$ip = ip2long($ip);
if (PHP_INT_SIZE == 8)
{
    if ($ip>0x7FFFFFFF)
    {
        $ip-=0x100000000;
    }
}
Run Code Online (Sandbox Code Playgroud)