ipアドレスをint に変換する
10.0.0.0 -> 167772160
10.0.0.1 -> 167772161
このように、IPアドレスを整数値に置き換えたい。
1 | 2 | 3 | 4 | |
---|---|---|---|---|
v4表記 | 10 | 0 | 0 | 1 |
2進数 | 0b00001010 | 0b00000000 | 0b00000000 | 0b00000001 |
3,4オクテットだけを見てみる。
1 | 2 | 3 | 4 | |
---|---|---|---|---|
v4表記 | 10 | 0 | 0 | 0 |
2進数 | 0b00001010 | 0b00000000 | 0b00000000 | 0b00000000 |
v4表記 | 10 | 0 | 0 | 1 |
2進数 | 0b00001010 | 0b00000000 | 0b00000000 | 0b00000001 |
v4表記 | 10 | 0 | 1 | 1 |
2進数 | 0b00001010 | 0b00000000 | 0b00000001 | 0b00000001 |
第4オクテットが1つ変わる場合 10.0.0.0 -> 10.0.0.1
には、整数値で1変化する
第3オクテットが1つ変わる場合 10.0.0.1 -> 10.0.1.1
には、整数値で256変化する
つまり、第3オクテットの変化量は、整数値で、256倍になる。
1オクテットは、10進数表記を2進数に直してるだけで、2進数の桁が上がるのです。(左へビットシフトを8回繰り返すので、28 だけ繰り上がる)
他の例も考えてみると
10.0 = (8+2) . 0 = 0b00001010 *2^8 + 0b00000000 10.1 = (8+2) . 1 = 0b00001010 *2^8 + 0b00000001 11.1 = (8+2+1) . 1 = 0b00001011 *2^8 + 0b00000001 12.1 = (8+4) . 1 = 0b00001100 *2^8 + 0b00000001 13.1 = (8+4+1) . 1 = 0b00001101 *2^8 + 0b00000001
ここから考えると、
1 | 2 | 3 | 4 | |
---|---|---|---|---|
v4表記 | 10 | 0 | 0 | 1 |
整数値 | 1 |
もっと単純に考えると、実質的に256進数なので
1 | 2 | 3 | 4 | |
---|---|---|---|---|
v4表記 | 10 | 0 | 0 | 1 |
整数値 |
上のようになり、結果として256進数を10進数に直すだけである。
IP アドレスを10進数(整数)に変換する
なので、IPアドレス(v4)を整数値(10進数)に変換するには 256を桁数n-1だけかければ良い
IP アドレス a.b.c.d があるとき、それを整数にするには。
ただし、a,b,c,d は 0-255 で、256進数であり、n は桁数を表す。
で、256 は固定なので
a*256^3+ b * a*256^2+ c * 256^1 + d * 256^0
もっと単純に、算数に落とし込むと
a*16777216 + b * 65536 + c * 256 + d
これだけである。