You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

十进制数转IP地址结果不一致:PowerShell与在线工具差异咨询

十进制转IPv4结果不一致的原因及解决方法

你的问题核心是字节序(端序)的差异:PowerShell的[IPAddress]类使用主机字节序(小端)解析整数,而标准的IPv4十进制转IP应该遵循网络字节序(大端)。

结果正确性说明

  • 在线工具给出的1.0.136.11是符合IPv4标准的正确结果(遵循网络字节序)。
  • PowerShell返回的11.136.0.1是因为Windows系统为小端字节序,[IPAddress]构造函数将整数按主机字节序拆分,导致字节顺序反转。

验证计算过程

以十进制数16812043为例:

  1. 转换为十六进制:0x0100880B
  2. 按**网络字节序(大端)**拆分(从高位到低位取8位):
    • 最高8位:0x01 → 1
    • 次高8位:0x00 → 0
    • 次低8位:0x88 → 136
    • 最低8位:0x0B → 11
    • 组合后:1.0.136.11
  3. 按**主机字节序(小端)**拆分(反转字节顺序):
    • 原十六进制字节顺序为01 00 88 0B,反转后为0B 88 00 01
    • 对应十进制:11、136、0、1
    • 组合后:11.136.0.1(即PowerShell的结果)

修改后的函数(符合标准网络字节序)

如果需要得到标准的IPv4结果,替换原函数为手动按大端拆分字节的版本:

function Convert-NumberToIP
{
    param(
        [Parameter(Mandatory=$true)][string]$number
    )

    [Int64] $numberInt = 0
    
    if([Int64]::TryParse($number, [ref]$numberInt) -and $numberInt -ge 0 -and $numberInt -le 0xFFFFFFFFl)
    {
        # 按网络字节序(大端)拆分32位整数
        $byte1 = ($numberInt -shr 24) -band 0xFF
        $byte2 = ($numberInt -shr 16) -band 0xFF
        $byte3 = ($numberInt -shr 8) -band 0xFF
        $byte4 = $numberInt -band 0xFF
        "$byte1.$byte2.$byte3.$byte4"
    }
}

# 测试
Convert-NumberToIP -number 16812043

运行后将返回标准结果1.0.136.11。

内容的提问来源于stack exchange,提问作者Naveen Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:10:15