通常,我們看到的IP 地址格式是類似192.168.1.1的點分十進制格式。但有時,IP 地址會被表示成連續的十六進製字符串,例如:
C0A80101
這其實就是192.168.1.1四個字節的十六進製表達。
每兩位十六進制數表示IP 地址中的一個字節(8位),例如:
C0 = 192
A8 = 168
01 = 1
01 = 1
PHP 內置的hexdec函數可以將十六進製字符串轉換為十進制數字。但要注意,它轉換的是整體數字,無法直接用來轉換點分四段的十六進制IP 地址,因此我們需要先將十六進製字符串按兩位拆分,再轉換為十進制數。
下面的腳本展示如何用PHP 把一個連續的8 位十六進制IP 地址轉換成點分十進制格式:
<?php
function hexIpToDecimal($hexIp) {
// 將輸入的字符串轉換為大寫,保證統一格式
$hexIp = strtoupper($hexIp);
// 檢查長度是否正確(IPv4 是 8 位十六進制)
if (strlen($hexIp) !== 8) {
return false; // 輸入格式錯誤
}
$ipParts = [];
// 每兩位一組,轉換為十進制
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 "十六進位IP: $hexIp 轉換後為: $decimalIp\n";
?>
運行結果:
十六進位IP: C0A80101 轉換後為: 192.168.1.1
輸入檢查<br> 函數首先確保傳入的十六進製字符串是8 位長(對應IPv4 的4 個字節)
分段處理<br> 利用substr每次取兩位字符,代表一個字節
轉換十六進制為十進制<br>用hexdec函數將兩位十六進製字符串轉換為十進制數
格式拼接<br> 將轉換後的四個十進制數字用點號連接,生成常見的點分十進制IP 地址
如果你遇到的十六進制IP 地址是帶分隔符的,比如C0:A8:01:01 ,可以先去掉分隔符再用上述方法處理:
$hexIp = str_replace(':', '', 'C0:A8:01:01');
$decimalIp = hexIpToDecimal($hexIp);
echo $decimalIp; // 輸出:192.168.1.1
通過以上方法,使用PHP 的hexdec函數就可以輕鬆地將十六進製表示的IP 地址自動轉換成我們熟悉的十進制點分格式。希望這篇文章對你有所幫助!