当前位置: 首页> 最新文章列表> 实现一个 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. 输入检查
    函数首先确保传入的十六进制字符串是 8 位长(对应 IPv4 的 4 个字节)。

  2. 分段处理
    利用 substr 每次取两位字符,代表一个字节。

  3. 转换十六进制为十进制
    hexdec 函数将两位十六进制字符串转换为十进制数。

  4. 格式拼接
    将转换后的四个十进制数字用点号连接,生成常见的点分十进制 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 地址自动转换成我们熟悉的十进制点分格式。希望这篇文章对你有所帮助!