通常、表示されるIPアドレス形式は、 192.168.1.1に似た点線の小数形式です。しかし、時には、IPアドレスが連続的な16進の文字列として表されることもあります。たとえば、次のようになります。
C0A80101
これは、実際には192.168.1.1の16進表現です。
2つの16進数ごとに、IPアドレスの1つのバイト(8ビット)を表します。たとえば、:
C0 = 192
A8 = 168
01 = 1
01 = 1
PHPの組み込みのHexDec関数は、ヘックス弦を小数点に変換できます。ただし、全体の数を変換し、4つのセグメントの16進数IPアドレスを変換するために直接使用できないことに注意する必要があります。したがって、最初に2つのビットで16進細分の文字列を分割してから、10進数に変換する必要があります。
次のスクリプトは、PHPを使用して、連続8ビット16進数IPアドレスを点線10進形式に変換する方法を示しています。
<?php
function hexIpToDecimal($hexIp) {
// 入力された文字列を大文字に変換します,統一された形式を確保します
$hexIp = strtoupper($hexIp);
// 長さが正しいかどうかを確認してください(IPv4 はい 8 16進)
if (strlen($hexIp) !== 8) {
return false; // 入力形式エラー
}
$ipParts = [];
// 2つごとに1つのグループ,小数に変換します
for ($i = 0; $i < 8; $i += 2) {
$partHex = substr($hexIp, $i, 2);
$partDec = hexdec($partHex);
$ipParts[] = $partDec;
}
// 点線形式にスプライスされています
$decimalIp = implode('.', $ipParts);
return $decimalIp;
}
// テストの例
$hexIp = "C0A80101";
$decimalIp = hexIpToDecimal($hexIp);
echo "16進IP: $hexIp に変換後: $decimalIp\n";
?>
実行結果:
16進IP: C0A80101 に変換後: 192.168.1.1
入力チェック<br> この関数は、最初に通過した16進数文字列の長さが8ビットであることを保証します(4バイトのIPv4に対応)。
セグメント化された処理<br> Subststrを使用して、1つのバイトを表すために一度に2つの文字を使用します。
ヘキサデシマルを小数<br>に変換します HexDec関数を使用して、2桁の16進ストリングを小数点に変換します。
フォーマットスプライシング<br> 変換された4つの10進数をDOT番号で接続して、一般的な点線の小数IPアドレスを生成します。
C0:A8:01:01など、遭遇する16進数IPアドレスが区切られている場合、最初にデリミターを削除してから、上記の方法を使用して対処できます。
$hexIp = str_replace(':', '', 'C0:A8:01:01');
$decimalIp = hexIpToDecimal($hexIp);
echo $decimalIp; // 出力:192.168.1.1
上記の方法を使用して、PHPのHexDec関数を使用して、16進数で表されるIPアドレスを馴染みのある小数ドットパート形式に簡単に変換できます。この記事があなたを助けることを願っています!