Javascript实现ip2long、long2ip函数的例子

发布时间:2021-01-02编辑:脚本学堂
本文介绍下,用javascript实现php中的ip2long、long2ip函数,来学习下javascript脚本是如何实现这二个函数的,有需要的朋友可以参考下。

ip2long、long2ip函数的例子:
 

复制代码 代码示例:
<?php
$ip = "192.0.34.166"; 
$long = ip2long($ip); 
 
echo $ip . "n";                          // 192.0.34.166 
echo $long . "n";                      // -1073732954 
printf("%un", ip2long($ip));      // 3221234342 

以上是PHP中ip2long的使用方法,不过有些ip转化成整数后,是负的,这是因为得到的结果是有符号整型,最大值是2147483647.要把它转化为无符号的。
 

复制代码 代码示例:
<?php
$gateway = "192.168.1.1"; 
$netmask = "255.255.255.0"; 
 
//网络地址 
$ip1 = ip2long($gateway) & ip2long($netmask); 
 
//广播地址 
$ip2 = ip2long($gateway) | (~ip2long($netmask)); 
 

javascript当中实现ip2long和long2ip,需要对网络上流传的代码做一些改写,将ip2long的无符号转成有符号,将long2ip的有符号转成无符号。

实例:
 

复制代码 代码示例:
function ip2long ( ip_address ) { 
    var output = false; 
    if ( ip_address.match ( /^d{1,3}.d{1,3}.d{1,3}.d{1,3}$/ ) ) { 
      var parts = ip_address.split ( '.' ); 
      var output = 0; 
      output = ( parts [ 0 ] * Math.pow ( 256, 3 ) ) + 
               ( parts [ 1 ] * Math.pow ( 256, 2 ) ) + 
               ( parts [ 2 ] * Math.pow ( 256, 1 ) ) + 
               ( parts [ 3 ] * Math.pow ( 256, 0 ) ); 
    } 
     
    return output<<0; 

 
function long2ip ( proper_address ) { 
    proper_address = proper_address>>>0; 
    var output = false;  // www.jb200.com
   
    if ( !isNaN ( proper_address ) && ( proper_address >= 0 || proper_address <= 4294967295 ) ) { 
      output = Math.floor (proper_address / Math.pow ( 256, 3 ) ) + '.' + 
               Math.floor ( ( proper_address % Math.pow ( 256, 3 ) ) / Math.pow ( 256, 2 ) ) + '.' + 
               Math.floor ( ( ( proper_address % Math.pow ( 256, 3 ) ) % Math.pow ( 256, 2 ) ) / 
Math.pow ( 256, 1 ) ) + '.' + 
               Math.floor ( ( ( ( proper_address % Math.pow ( 256, 3 ) ) % Math.pow ( 256, 2 ) ) % 
Math.pow ( 256, 1 ) ) / Math.pow ( 256, 0 ) ); 
    } 
    
    return output;