PHP不支持无符号整数。 有没有办法将无符号整数的字符串表示转换为带溢出的有符号整数?
例:
在32位系统上,PHP可以存储int值< = 2147483647.我想要一种方法将字符串“2147483648”转换为整数,使其溢出到-2147483648而不是减少到2147483647。
为什么我要这样做?
我将IPv4地址作为unsigned int(32位)存储在数据库中。我想对PHP中的地址进行二进制操作以检查子网。这需要在每个请求上完成,因此需要快速。因此,最好将IP地址存储为unsigned int,而不是存储必须来回转换的字符串。
答案 0 :(得分:4)
这是解决方法。
<?php
$unsignedString = "3000000000";
echo "unsigned string: ".$unsignedString."<br />";
$signedInt = intval(doubleval($unsignedString));
echo "signed int: ".$signedInt."<br />";
?>
答案 1 :(得分:0)
最快,最简单的方法是让你的RDBMS以某种方式完成它。
通过检查预定义常量PHP_INT_SIZE
的值,可以找出PHP中整数的大小。如果在32位系统上运行,则为4;如果在64位系统上运行,则为8。
我建议您使用例如
填充变量$smallIntegers = intval(PHP_INT_SIZE == 4);
然后在您的查询中使用以下内容:
SELECT
...,
CASE
WHEN :smallIntegers: = 1 AND IPAddress > 2147483647 THEN IPAddress - 4294967296
ELSE IPAddress
END AS IPAddress,
...
...
答案 2 :(得分:0)
你能将IP地址存储在一个整数数组中,IP的一个部分存储到数组的每个部分,因此最大值最终会以255存储在任何一个整数中:
$ipAddress = array(127, 0, 0, 1);