IPv4のアドレスをC++で扱う



なんでいまさら、という気がするけども、C/C++でIPアドレス(IPv4)を扱う必要があったので、ボーッと考えてみた。

int型を32bitとすると、IPv4のアドレスは、ちょうどunsigned int型の変数1つで扱う事ができる。

unsigned int 型のiAddress に値が入っていてAAA.BBB.CCC.DDDの形式に変換したい場合は、iAddress をシフトすればいい。例えば以下のような感じ。

iAAA = (iAddress >> 24) & 255
iBBB = (iAddress >> 16) & 255
iCCC = (iAddress >> 8) & 255
iDDD = (iAddress >> 0) & 255

iAAA〜iDDDは0〜255の値が入る。

逆に変換する場合はAAA〜DDDを逆にシフトしていって足せばいい。
iAddress = (iAAA<<24)+(iBBB<<16)+(iCCC<<8)+iDDD

IPv6は、、、、、どうなんでしょう。

Posted: 日 - 11月 12, 2006 at 09:18 午後        


©