當前位置: 首頁> 最新文章列表> 實現一個PHP 腳本,自動將十六進制IP 地址轉為十進制格式

實現一個PHP 腳本,自動將十六進制IP 地址轉為十進制格式

gitbox 2025-05-28

什麼是十六進制IP 地址?

通常,我們看到的IP 地址格式是類似192.168.1.1的點分十進制格式。但有時,IP 地址會被表示成連續的十六進製字符串,例如:

 C0A80101

這其實就是192.168.1.1四個字節的十六進製表達。

每兩位十六進制數表示IP 地址中的一個字節(8位),例如:

  • C0 = 192

  • A8 = 168

  • 01 = 1

  • 01 = 1

使用PHP hexdec函數轉換十六進製字符串

PHP 內置的hexdec函數可以將十六進製字符串轉換為十進制數字。但要注意,它轉換的是整體數字,無法直接用來轉換點分四段的十六進制IP 地址,因此我們需要先將十六進製字符串按兩位拆分,再轉換為十進制數。

示例PHP 腳本

下面的腳本展示如何用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

代碼說明

  1. 輸入檢查<br> 函數首先確保傳入的十六進製字符串是8 位長(對應IPv4 的4 個字節)

  2. 分段處理<br> 利用substr每次取兩位字符,代表一個字節

  3. 轉換十六進制為十進制<br>用hexdec函數將兩位十六進製字符串轉換為十進制數

  4. 格式拼接<br> 將轉換後的四個十進制數字用點號連接,生成常見的點分十進制IP 地址


擴展:處理帶分隔符的十六進制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 地址自動轉換成我們熟悉的十進制點分格式。希望這篇文章對你有所幫助!