2014-12-02 69 views
3

我有一個子網掩碼,在一個對象的值。它以長形式出現,即。 255.255.255.0(for/24)。函數子網掩碼

我還沒有碰到過某種JavaScript函數的計算這一點。所以之前我寫了一大堆的ifelse if聲明,我要趕緊仔細檢查,以確保我沒有錯過一些JavaScript好吃的東西,做這個了。

謝謝!

編輯: 澄清

我在想,如果有一個JavaScript函數,我不知道,這將翻譯的長表,並返回一個縮寫形式,斜槓符號。例如:

如果我將var obj_mask = "255.255.255.0";傳遞給現有的JavaScript(API?),它將返回/24值。

如果JavaScript中不存在這樣的函數,那很好,我已經寫了if聲明的一半,我很樂意在分享之後分享它,以便其他人不必寫出它。但是看到我是JS新手,我想知道這個函數/ API是否存在於本地語言中。

+0

這個問題有點不清楚。你是說你有一個字符串形式的子網掩碼,並希望把它變成二進制/整數形式? – Blake 2014-12-02 23:59:56

+0

加入澄清,對不起。 – misterbear 2014-12-03 00:07:04

回答

1

剛寫完它,然後意識到它看起來吸塵器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 = "" 
    } 
0

嘗試...

/* dotted-quad IP to integer */ 
function IPv4_dotquadA_to_intA(strbits) { 
    var split = strbits.split('.', 4); 
    var myInt = (
     parseFloat(split[0] * 16777216) /* 2^24 */ 
     + parseFloat(split[1] * 65536)  /* 2^16 */ 
     + parseFloat(split[2] * 256)  /* 2^8 */ 
     + parseFloat(split[3]) 
    ); 
    return myInt; 
} 

/* integer IP to dotted-quad */ 
function IPv4_intA_to_dotquadA(strnum) { 
    var byte1 = (strnum >>> 24); 
    var byte2 = (strnum >>> 16) & 255; 
    var byte3 = (strnum >>> 8) & 255; 
    var byte4 = strnum & 255; 
    return (byte1 + '.' + byte2 + '.' + byte3 + '.' + byte4); 
} 
+0

這非常整齊。大量的數學。它應該返回'/ 24',而使用'255.255.255.0'中的閃存符號。 – misterbear 2014-12-03 00:11:53

5

我用了以下功能以網絡掩碼CDIR和CDIR到網絡掩碼轉換:

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

var CDIR2netmask = (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('.'); 
} 

希望這有助於!

+0

這是我的最愛。 – dthree 2017-06-08 22:49:18