ip2long在32位系统下“溢出”问题

PHP ip2long的算法是
A*256*256*256+B*256*256+C*256+D
这个和mysql的INET_ATON算法是一样的。如果你把10.0.0.1使用ip2long计算,得到的结果是167772161,如果你把这个整数存到数据库里面(mysql存储这个值是字段需要用int UNSIGNED。否则,128以上的IP段就存储不了了。),你可以这样取得这个结果集SELECT INET_ATON('10.0.0.1')。
ip2long计算的结果可以使用long2ip来进行逆运算。唯一的一个小问题是,在32位系统上,高位IP计算出来的long会超长“溢出”, 输出一个负数。不过不影响long2ip进行逆运算。不过在判断IP区间的话,可能引起麻烦。解决办法 就是看是否是负数,如果是负数,使用sprintf格式化输出或者bindec再decbin

Author Info :
  • From:ip2long在32位系统下“溢出”问题
  • URL:http://blog.ihipop.info/2012/02/2998.html
  • Please Reserve This Link,Thanks!
  • 《ip2long在32位系统下“溢出”问题》上有3条评论

    发表评论

    电子邮件地址不会被公开。 必填项已用*标注