php中的ip2long和long2ip的理解
IPv4地址是如何表示的
IPv4使用无符号32位地址,因此最多有2的32次方减1(4294967295)个地址。一般的书写法为用4个小数点分开的十进制数,记为:A.B.C.D,比如:157.23.56.90。
IPv4地址转换成无符号整型

右移
逻辑右移
右移多少位,则在高位补多少位0。
算术右移
对无符号数做算术右移和逻辑右移的结果是相同的。但是对一个有符号数做算术右移,则右移多少位,即在高位补多少位1。
注意事项
对于C来说,只提供了>>右移运算符,究竟是逻辑右移还是算术右移这取决于编译器的行为,因此一般只提倡对无符号数进行位操作。
#include <stdio.h>
#include <time.h> unsigned int ip2long(const char *ip){
unsigned int a, b, c, d;
unsigned int ret;
int num = sscanf(ip, "%d.%d.%d.%d", &a, &b, &c, &d);
if(num == 4){
ret = (a << 24) + (b << 16) + (c << 8) + d;
}else{
ret = 0;
}
return ret;
} int long2ip(unsigned int intip, char *str, int str_len){
if(!str){
return -1;
}
int a, b, c, d;
a = (intip & 0xff000000) >> 24;
b = (intip & 0x00ff0000) >> 16;
c = (intip & 0x0000ff00) >> 8;
d = intip & 0x000000ff;
snprintf(str, str_len, "%d.%d.%d.%d", a, b, c, d);
return 0;
} int main(){
const char *ip = "222.234.255.189";
unsigned ret; ret = ip2long(ip);
printf("ip2long=%u\n", ret); char str[512];
long2ip(ret, str, sizeof(str));
printf("long2ip=%s\n", str);
}
关于位运算有一片非常好的文章:http://blog.csdn.net/hguisu/article/details/7892596
php中的ip2long和long2ip的理解的更多相关文章
- php手动实现ip2long和long2ip
php手动实现ip2long和long2ip /** * 测试 */ public function testipAction() { $ip = '10.58.101.175'; echo ip2l ...
- 关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)
关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录) 作者:王可利(Star·星星) HTML中 相对定位:position:relative; 绝对定位:position ...
- IIFE-js中(function(){…})()立即执行函数写法理解
介绍IIFE IIFE的性能 使用IIFE的好处 IIFE最佳实践 jQuery优化 在Bootstrap源码(具体请看<Bootstrap源码解析>)和其他jQuery插件经常看到如下的 ...
- 关于 js 中的 call 和 apply使用理解
关于 js 中的 call 和 apply使用理解 在学习新的东西时候,碰到以前看过而又不理解,或则记忆不深的地方不妨回头看看书里知识点,有助于加深理解.正所谓--温故而知新. 废话不多说,直接上代码 ...
- C++的IO处理中的头文件以及类理解(2)<sstream>头文件
C++的IO处理中的头文件以及类理解(2)<sstream>头文件 头文件<sstream>中定义的类型都继承iostream头文件中定义的类型.除了继承得来的操作,sstre ...
- 3个问题:MySQL 中 character set 与 collation 的理解;utf8_general_ci 与 utf8_unicode_ci 区别;uft8mb4 默认collation:utf8mb4_0900_ai_ci 的含义
MySQL 中 character set 与 collation 的理解 出处:https://www.cnblogs.com/EasonJim/p/8128196.html 推荐: 编码使用 uf ...
- 关于Java中语句符号及格式的理解
关于Java中语句符号及格式的理解 这篇文章是撰写的第一篇文章,在此作一下博主是一名在读的工科研究生,种种原因,研二开始决定转行从事程序员工作.开始的自学之路并不算非常顺畅,也走了一点弯路,但一直都坚 ...
- matlab中矩阵式子的不成熟理解
matlab中的矩阵式的系统方式理解:一个矩阵式代表一个系统的作用,列代表输入,行代表输出,有多少列就有多少输入,有多少行就有多少输出,矩阵式的相加代表的是线性系统的叠加作用,矩阵式的相乘代表的是两个 ...
- STL 中的map 与 hash_map的理解
可以参考侯捷编著的<STL源码剖析> STL 中的map 与 hash_map的理解 1.STL的map底层是用红黑树存储的,查找时间复杂度是log(n)级别: 2.STL的hash_ma ...
随机推荐
- UIApplicationDelegate
App受到干扰时,UIApplication会通知它的delegate对象,让delegate处理系统事件. 项目中的AppDelegate已经遵守了UIApplicationDelegate协议 ...
- android studio我的习惯操作
一.修改字体 点击左上角File选择settings....进入界面选择Editor-->Colors&Fonts-->Font点击界面中Save As...在对话框中输入名字点击 ...
- OC self = [super init] , 点语法 , @property
OC self = [super init] , 点语法 , @property 构造方法为啥这么写? self = [super init]; [super init] 的结果可能有三种: 第一种: ...
- Mac OS 文件、文件夹重命名的方法
在Mac OS中,文件和文件名重命名的方法非常简单 选中你想要命名的文件或者文件夹,按回车,可以直接重命名,输入你要修改的内容,确认后,再按回车就OK啦--- 希望能对你有所帮助^_^
- js DOM Document类型
JavaScript通过Document类型访问文档.在浏览器中,document对象是HTMLDocument(继承自 Document类型)的一个实例,表示整个HTML页面.document对象是 ...
- 转载文章----IL反编译利器——Ildasm.exe和Reflector.exe:
转载地址:http://www.cnblogs.com/yangmingming/archive/2010/02/03/1662546.html 一:Ildasm.exe简介 这一微软VS自带工具, ...
- 【转】简析 .NET Core 构成体系
前文介绍了.NET Core 在整个.NET 平台所处的地位,以及与.NET Framework的关系(原文链接),本文将详细介绍.NET Core 框架的构成和各模块主要功能,以及如何实现跨平台. ...
- 一个经典实用的iptables shell脚本
PS:这个iptables脚本不错,很实用,根据实际应用改一下就可以自己用.分享出来,供大家来参考.原作者佚名.源代码如下: #!/bin/sh # modprobe ipt_MASQUERADE m ...
- python中列表、元组、字典内部功能介绍
一.列表(list) 常用功能的介绍:
- MySQL用户无法登陆问题
安装完MySQL后,我们通常添加拥有相应权限的普通用户用来访问数据库.在使用普通用户(假设为tom)本地登录数据库的时候,经常会出现无法登录的情况,但是从其他的mysql客户端却可以登录.在本地使用t ...