IP转换数字

Ip地址作为一个域名的门牌号很多人只知其一不知其二,今天来总结下IP是怎么在互联网上使用的。目前已经在用的分为32位和64位的IP,64现在用的很少我还没遇到过,不在本文的范畴。

32位(示例):10.189.12.241

为什么要用这种格式来显示?

回答:ip地址是二进制,只不过为了让人看,写成10进制,本质还是二进制

php提供了ip2long()和long2ip()来实现IP转换位数字和数字再次转换为IP,用于验证IP的真实性。

ip2long()代码示例

<?php
$ip   = gethostbyname('www.example.com');
$long = ip2long($ip);

if ($long == -1 || $long === FALSE) {
    echo 'Invalid IP, please try again';
} else {
    echo $ip   . "\n";            // 192.0.34.166
    echo $long . "\n";            // 3221234342 (-1073732954 on 32-bit systems, due to integer overflow)
    printf("%u\n", ip2long($ip)); // 3221234342
}

long2ip()代码示例

<?
    if (!function_exists("long2ip")) {
        function long2ip($long) {
            // Valid range: 0.0.0.0 -> 255.255.255.255
            if ($long < 0 || $long > 4294967295) return false;
            $ip = "";
            for ($i=3;$i>=0;$i--) {
                $ip .= (int)($long / pow(256,$i));
                $long -= (int)($long / pow(256,$i))*pow(256,$i);
                if ($i>0) $ip .= ".";
            }
            return $ip;
        }
    }

不管是那个函数都要知晓其执行的原理,既然我们已经知道所谓的IP其实就是一堆二进制的数字,那么我们来解释解释这个函数的原理

32位意思是:32个0101组成的数字,逢8位截取一段将二进制机器码转换为能看得懂的十进制数字,用“.”间隔就变成了我们常规看到的xxx.xxxx.xxx.xxx的ip地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值