子网掩码的功能

mis*_*ear 4 javascript jquery subnet

我有一个子网掩码作为对象中的值.它有长形式,即.255.255.255.0(适用于/ 24).

我没有遇到某种JavaScript函数来计算它.所以在我编写很多ifelse if语句之前,我想快速仔细检查以确保我没有错过一些已经执行此操作的JavaScript好东西.

谢谢!

编辑: 澄清

我想知道是否有一个我不知道的JavaScript函数,它将转换长格式并返回一个简短形式,斜杠符号.例如:

如果我传递var obj_mask = "255.255.255.0";给现有的JavaScript(API?),它将返回一个/24值.

如果JavaScript中不存在这样的功能,那很好,我已经写了一半的if语句,我很乐意分享它,所以没有其他人必须写出来.但是看到我是JS的新手,我想知道这种函数/ API是否存在于该语言本身.

Xav*_*gea 8

我使用以下函数进行网络掩码到CDIR和CDIR到网络掩码转换:

var netmask2CIDR = (netmask) => (netmask.split('.').map(Number)
      .map(part => (part >>> 0).toString(2))
      .join('')).split('1').length -1;

var CIDR2netmask = (bitCount) => {
  var mask=[];
  for(var i=0;i<4;i++) {
    var n = Math.min(bitCount, 8);
    mask.push(256 - Math.pow(2, 8-n));
    bitCount -= n;
  }
  return mask.join('.');
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


mis*_*ear 3

刚刚写完,然后意识到它看起来会更干净switch case

供大家参考。如果实际上有一些 JS 函数或 API 可以使这变得更加干净和简单,请回答,我会标记它。

    switch(ret_mask = path.mask) {
        case "0.0.0.0":
            return ret_mask = "/0";
        case "128.0.0.0":
            return ret_mask = "/1";
        case "192.0.0.0":
            return ret_mask = "/2";
        case "224.0.0.0":
            return ret_mask = "/3";
        case "240.0.0.0":
            return ret_mask = "/4";
        case "248.0.0.0":
            return ret_mask = "/5";
        case "252.0.0.0":
            return ret_mask = "/6";
        case "254.0.0.0":
            return ret_mask = "/7";
        case "255.0.0.0":
            return ret_mask = "/8";
        case "255.128.0.0":
            return ret_mask = "/9";
        case "255.192.0.0":
            return ret_mask = "/10";
        case "255.224.0.0":
            return ret_mask = "/11";
        case "255.240.0.0":
            return ret_mask = "/12";
        case "255.248.0.0":
            return ret_mask = "/13";
        case "255.252.0.0":
            return ret_mask = "/14";
        case "255.254.0.0":
            return ret_mask = "/15";
        case "255.255.0.0":
            return ret_mask = "/16";
        case "255.255.128.0":
            return ret_mask = "/17";
        case "255.255.192.0":
            return ret_mask = "/18";
        case "255.255.224.0":
            return ret_mask = "/19";
        case "255.255.240.0":
            return ret_mask = "/20";
        case "255.255.248.0":
            return ret_mask = "/21";
        case "255.255.252.0":
            return ret_mask = "/22";
        case "255.255.254.0":
            return ret_mask = "/23";
        case "255.255.255.0":
            return ret_mask = "/24";
        case "255.255.255.128":
            return ret_mask = "/25";
        case "255.255.255.192":
            return ret_mask = "/26";
        case "255.255.255.224":
            return ret_mask = "/27";
        case "255.255.255.240":
            return ret_mask = "/28";
        case "255.255.255.248":
            return ret_mask = "/29";
        case "255.255.255.252":
            return ret_mask = "/30";
        case "255.255.255.254":
            return ret_mask = "/31";
        case "255.255.255.255":
            return ret_mask = ""
    }
Run Code Online (Sandbox Code Playgroud)