IPアドレスを16進数に変換するには

IPアドレスには192.168.1.1のような32ビット表記のバージョン4(IPv4)と、128ビット表記のバージョン6(IPv6)があります。

これを書いている2019年でもIPアドレス枯渇問題が言われながらもIPv4は現役です。

そのIPアドレスですが、見た目では192.168.100.10のよう分かりやすいフォーマットですが、各ビット値(ドットで区切られた各値)が1文字から3文字と可変であるため、データベースなどで管理する場合は各ビット値が変わらない16進数に変換してから管理することもあります。


サンプルコード

コードを分かりやすくするためにIPアドレスを固定で”192.168.1.10″にして、それを16進数に変換する関数です。

処理の内容はコメントにほとんど書いていますが、分かりにくいところを補足します。

18行目のRight関数を使った処理ですが、左に”00″を付けてます。

これには理由があります。

例えば”10″を16進数にするとHex関数は”0A”ではなく”A”を返します。

“A”1文字のまま各ビットを連結すると、例えば変換後の16進数文字列が”0A0A”の場合に、元のIPアドレスが”0.10.0.10″なのか一部分の”10.10″なのかの判定が出来ません。

このように16進数1文字を連結してしまうと、元のIPアドレスのドット区切り位置の判定がとても面倒になるため、各ビットの16進数変換後の文字列を”00″から”FF”の2文字に統一するために”00″を左につけて、”00A”の右の2文字をRight関数で取って”0A”としています。