function ip_translate_from_str(ip_str)
{
var ip_int = 0;
if(is_ip(ip_str))
{
var ip_split = ip_str.split('.');
ip_int |= parseInt(ip_split[0]);
ip_int |= parseInt(ip_split[1]) << 8;
ip_int |= parseInt(ip_split[2]) << 16;
ip_int |= parseInt(ip_split[3]) << 24;
}
return ip_int;
}
该方法转换如192.168.1.128及以上同网段IP时会返回一个负数,请问是为啥~~

解决方案 »

  1.   


    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <title>new document</title>
    <script type="text/javascript">
    function ip2num(ip){
    var arr = ip.split("."), x = 1, ret = 0;
    for(var i = 0; i < arr.length; i++){
    ret += arr[i] * x;
    x *= 256;
    }
    return ret;

    }
    function num2ip(n){
    var ret = [], x = 256 * 256 * 256;
    for(var i = 0; i < 4; i++){
    ret.push(parseInt(n / x));
    n %= x;
    x /= 256;
    }
    return ret.reverse().join(".");
    }
    var n = ip2num("192.168.1.228");
    alert(n);
    alert(num2ip(n));
    </script>
    </head>
    <body></body>
    </html>
      

  2.   

    你为什么这么执着于每段IP都向左位移8的倍数位呢,4位的的话既能解决问题,又能回避问题
    ip_int |= parseInt(ip_split[0]);
    ip_int |= parseInt(ip_split[1]) << 4;
    ip_int |= parseInt(ip_split[2]) << 8;
    ip_int |= parseInt(ip_split[3]) << 12;
      

  3.   

    #3楼的做法好像得到的还是String类型