255.0.0.0 255.128.0.0
こういうの。
これを、例えば.htaccessで使うときは、ビットカウント表記法で指定すると便利。
255.0.0.0/8
こんな感じ。
しかしねぇ…この計算が以外に面倒。
ドットで区切られたそれぞれを、2進数に変換して、8桁ずつ並べて…
という理屈は分かるし、冷静に計算すれば別に出来るんだけどね…
めんどくせぇって(泣)
計算方法先頭と最後を2進数に変換する255.0.0.0 → 11111111.00000000.00000000.00000000
255.128.0.0 → 11111111.10000000.00000000.00000000
左から見ていって、何ビット(何文字)共通してるかを見る。
この場合、赤字部分、8bitが固定されているので、
表記は、
255.0.0.0/8
となる。
というわけで、自分のためだけに、計算機を作成してみた。
ネットマスクのビット表記法変換
エラー処理すらしてない上に、計算も力業で数学じゃない、
ていうか、本当に合ってるかすらも自信ない、けどまぁ…
個人使用には十分耐えるでしょ、ってことで。
ずいぶん楽になりました。
(数学的処理知ってる人は教えてください。はい)
ネット検索してもそれらしい物に当たらないってことは、
多分、一般常識レベルなんでしょうなぁ…わからんやつは触るな、と。
まぁ、でも一応、リンクだけ貼っておこう。
ソース。
<?php※あまりに汚かったので少し直しました。(2005-2-19 20:24)
#===============================================================#
# IP範囲 -> ビットカウント表記法 #
# Version: 1.00.00 #
#===============================================================#
# 【概要】 #
# ————————————————————- #
# 以下の変換を行う。 #
# 202.181.96.0 <-> 202.181.107.0 → 202.181.96.0/20 #
# #
# まずそれぞれを2進数に変換し、0を補って8桁にした後、 #
# 先頭から何文字が共通しているかを調べ、 #
# その値を始点に付けて返す。 #
# 数学のかけらもない、かなり強引な手段ではあるが。 #
#===============================================================#
if($_REQUEST[‘mode’] == “calc”){
$bit = makemask($_REQUEST[‘decx’],$_REQUEST[‘decy’]);
}
#———————————————————–#
# 変換プログラム #
#———————————————————–#
function makemask($decx,$decy){
for($i = 0;$i < 4;$i++){
$binx[$i] = sprintf(“%08d”,decbin($decx[$i]));
$biny[$i] = sprintf(“%08d”,decbin($decy[$i]));
}
$x = implode(“”,$binx);
$y = implode(“”,$biny);
for($i = 0;$i < 32;$i++){
$cmp = strncmp($x,$y,($i + 1));
if($cmp < 0){
$nm = $i;
break;
}
}
return implode(“.”,$decx) . “/” . $nm . “<br>\n”;
}
?>
<html>
<head>
<title>ネットマスクのビット表記法変換</title>
<style>
div {font:9pt Verdana;}
input {font:9pt Verdana;width:50px;ime-mode:disabled;}
input.Submit {font:bold 9pt Verdana;width:50px;}
</style>
</head>
<body>
<form method=”POST” action=”netmaskcalc.php”>
<input type=”hidden” name=”mode” value=”calc”>
<div>IPアドレス先頭</div>
<div>
<?php
for($i = 0;$i < 4;$i++){
print “<input type=\”text\” name=\”decx[]\” maxlength=3>\n”;
}
?>
</div>
<div>IPアドレス最後</div>
<div>
<?php
for($i = 0;$i < 4;$i++){
print “<input type=\”text\” name=\”decy[]\” maxlength=3>\n”;
}
?>
</div>
<input type=”submit” value=”CALC” class=”Submit”>
</form>
<?=$bit?>
</body>
</html>