【java】根据 IP 掩码计算网络广播地址

因为业务需求,需要java程序实现根据 IP 掩码计算网络广播地址。本人对于相关知识不太了解,网上东平西凑加上他人指导写的程序,记录留作后用。

【java】根据 IP 掩码计算网络广播地址


// ipMask : 127.0.0.1/24

public static String getBcast(String ipMask){

    String[] ipMaskArray = ipMash.split("\\/");

    int mask = Integer.parseInt(ipMaskArray[1]);

    String ipaddr = ipMaskArray[0];

    StringBuffer ipMasksb = new StringBuffer();

    StringBuffer ipMaskfsb = new StringBuffer();

    for(int i = 1; i <= 32; i++){

        if(i < mask){

            ipMasksb.append(1);

           ipMaskfdb.append(0);

        }else{

            ipMasksb.append(0);

           ipMaskfdb.append(1);

        }

    }

    String netAddr = Long.toBinaryString(ipToLong(ipaddr) & Long.parseLong(ipMasksb.toString(), 2));

    long longBcast = Long.parseLong(netAddr, 2) | Long.parseLong(ipMaskfsb.toString(), 2);

    return longToIP(longBcast );

}

public static long ipToLong(String strIp) {
    String[] ip = strIp.split("\\.");
    return (Long.parseLong(ip[0]) << 24) + (Long.parseLong(ip[1]) << 16) + (Long.parseLong(ip[2]) << 8) + Long.parseLong(ip[3]);
}

public static String longToIP(long longIp)
{
    StringBuffer sb = new StringBuffer("");
    // 直接右移24位
    sb.append(String.valueOf((longIp >>> 24)));
    sb.append(".");
    // 将高8位置0,然后右移16位
    sb.append(String.valueOf((longIp & 0x00FFFFFF) >>> 16));
    sb.append(".");
    // 将高16位置0,然后右移8位
    sb.append(String.valueOf((longIp & 0x0000FFFF) >>> 8));
    sb.append(".");
    // 将高24位置0
    sb.append(String.valueOf((longIp & 0x000000FF)));
    return sb.toString();
}

ip 和 Long 的互转是网上查询到的方法,具体出处开发时没记录,忘了出处,在此表示抱歉