php ip2long负数的问题
大家可能都知道php提供了ip2long与long2ip方法对ip地址处理。抛砖引玉,说点概念性滴:
1.ip2long — 将一个IPV4的字符串互联网协议转换成数字格式
int ip2long ( string $ip_address )
参数: ip_address 一个标准格式的地址。
返回值: 返回IP地址转换后的数字 或 FALSE 如果 ip_address 是无效的
2.long2ip — 将数字格式转换成一个IPV4的字符串互联网协议
string long2ip ( string $ip_address )
参数:ip_address 长整型的正确地址表示。
返回值: 返回互联网地址作为字符串。
示例:
$ip = '10.0.0.1';
$ip_long = ip2long($ip);
echo $ip_long.PHP_EOL; //
echo long2ip($ip_long); // 10.0.0.1
当ip地址比较大时,ip2long会出现负数:
$ip = '192.168.100.1';
$ip_long = ip2long($ip);
echo $ip_long.PHP_EOL; // -1062706175
echo long2ip($ip_long); // 192.168.100.1
原因:
IPv4使用无符号32位地址,因此最多有2的32次方减1(4294967295)个地址。书写用4个小数点分开的10进制数。 
记为A.B.C.D,例如:192.168.100.100。
IPv4地址每个10进制数都是无符号的字节,范围在0~255,将IPv4地址转为无符号数,
废话不多说了,解决办法:
输出时用%u来格式化为无符号整型。
$ip = '192.168.100.1';
$ip_long = sprintf('%u',ip2long($ip));
echo $ip_long.PHP_EOL; //
echo long2ip($ip_long); // 192.168.100.1
php ip2long负数的问题的更多相关文章
- php ip2long 负数问题
		
官方网站: Note: 因为PHP的 integer 类型是有符号,并且有许多的IP地址讲导致在32位系统的情况下为负数, 你需要使用 "%u" 进行转换通过 sprintf() ...
 - php的IP转换成整型函数ip2long()易出现负数
		
php中将IP转换成整型的函数ip2long()容易出现问题,在IP比较大的情况下,会变成负数.如下<?php$ip = "192.168.1.2";$ip_n = ip2l ...
 - PHP函数ip2long转换IP时数值太大而产生负数
		
// 使用 sprintf 返回无符号十进制数 $long = sprintf("%u",ip2long($ip)); // 先转换为二进制然后在转换为十进制 $long = bi ...
 - PHP函数ip2long转换IP时数值太大产生负数的解决办法
		
有两种办法: 1. bindec( decbin($long)) 利用bindec和decbin两个函数转换一次就没有问题了 我一直在用上面的方法,但是在升级到PHP7以后就不起作用了(因为最近只进 ...
 - ip2long的用法
		
ip2long:将IPv4的ip地址(以小数点分隔形式)转换为int Description int ip2long ( string ip_address ) 如果ip地址非法,返回FALSE(PH ...
 - ip2long与long2IP 分析
		
<?php $ip='47.93.97.127'; $long=sprintf("%u",ip2long($ip));//string(9) "794648959& ...
 - C#设置textBox只能输入数字(正数,负数,小数)简单实现
		
/* *设置textBox只能输入数字(正数,负数,小数) */ public static bool NumberDotTextbox_KeyPress(object sender, KeyPres ...
 - #define  DELAY_ONE_MICROSECOND  (-10) 时间是负数的原因
		
以下摘自DOOM的博文<内核同步对象> http://blog.csdn.net/lqk1985/article/details/2541867 “最后一个参数&timeout是一 ...
 - php中的ip2long和long2ip的理解
		
IPv4地址是如何表示的 IPv4使用无符号32位地址,因此最多有2的32次方减1(4294967295)个地址.一般的书写法为用4个小数点分开的十进制数,记为:A.B.C.D,比如:157.23.5 ...
 
随机推荐
- Go语言基础之函数
			
Go语言基础之函数 函数是组织好的.可重复使用的.用于执行指定任务的代码块.本文介绍了Go语言中函数的相关内容. 函数 Go语言中支持函数.匿名函数和闭包,并且函数在Go语言中属于“一等公民”. 函数 ...
 - Springboot搭建SSM+JSP的web项目
			
Springboot搭建SSM+JSP的web项目 一:创建项目结构: 项目结构分为三个部分: 1 后端项目开发文件: 包: Util 工具包 Mapper db层 Serv ...
 - Servlet 上传下载文件
			
上传文件 1)在表单中使用表单元素 <input type=“file” />,浏览器在解析表单时,会自动生成一个输入框和一个按钮 2)表单需要上传文件时,需指定表单 enctype 的值 ...
 - C++之几个最常
			
1.同类对象间的数据共享——静态成员 静态数据成员声明静态数据成员要采用关键字static:类静态数据成员的定义和初始化定义:static 数据类型 成员名:初始化:数据类型 类名::静态数据成员名= ...
 - C语言面试题分类->指针
			
有关指针的经典面试题 C语言为何如此长寿并实用?C++为什么有那么多精彩?指针可以说是C/C++中的灵魂所在,虽然早期中pascal也有指针,但是和C/C++比起来不是一个级别的.今天为大家深入浅出的 ...
 - 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(2)
			
二.nova-api 步骤3:nova-api接收请求 nova-api接收请求,也不是随便怎么来都接收的,而是需要设定rate limits,默认的实现是在ratelimit的middleware里 ...
 - Gem::LoadError: Specified 'sqlite3' for database adapter, but the gem is not loaded
			
解决办法: 指定sqlite3的版本为1.3.13: gem 'sqlite3', '~> 1.3.13' 然后运行bundle update
 - NIO类库
			
NIO概述 从JDK1.4开始,引入了新的I/O类库,它们位于java.nio包中,其目的在于提高I/O的操作效率.nio是new io的缩写. 参考文章:NIO BIO AIO区别 java.nio ...
 - [Swift]LeetCode25. k个一组翻转链表 | Reverse Nodes in k-Group
			
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k ...
 - PHP算法之选择排序
			
//选择排序 $array = [10,203,30,2,4,43]; //第一次从下标为0的开始下标为0的这个数与后面的n-1个进行比较:找出最小或者最大的放在下标为0的这个位置; //第二次从下标 ...