【问题标题】:How do display the Integer value of an IPAddress [closed]如何显示 IPAddress 的整数值 [关闭]
【发布时间】:2010-10-02 16:57:57
【问题描述】:

我正在查看 System.Net 命名空间,它有一个您可以使用的 IPAddress 实例。这有一个 Parse 方法,您可以使用该方法将字符串解析为 IPInstance,然后使用 Address 属性为您提供 long 值。

不过……

返回的数字不是真正的转换。

例如对于 IP 58.0.0.0 , System.Net 命名空间给了我一个 58 的值... 事实上,整数值应该是 973078528

有人可以告诉我正确的代码来转换它吗?

公式应该是..(对于 ip 192.1.20.10)。

192 * (256*256*256) + 1 * (256*256) + 20 * (256) + 10

这个公式正确的原因是它返回的数字可以在 >= 和

(IPAddress 实例的)地址属性不计算/返回此值。任何知道为什么地址属性不返回我认为正确答案的人的奖励点...

其他链接中的其他示例也不起作用。

【问题讨论】:

标签: c# vb.net ip-address


【解决方案1】:

【讨论】:

  • 该问题要求 C# 解决方案。这个问题是针对 .NET 的
  • 我不明白你的意思“BitConverter.ToInt32(System.Net.IPAddress.Parse(address).GetAddressBytes(), 0);” .NET 解决方案。
  • 这个问题和接受的答案对我的问题不正确。
【解决方案2】:

How to convert an IPv4 address into a integer in C#?

示例代码列在选择的答案中

e; f, b

【讨论】:

    【解决方案3】:

    您所看到的似乎是字节序问题。

    作为一个通用函数,如果您的 IP 地址是 A.B.C.D,那么您所追求的值是:

    A << 24 +    (= A * 16777216)
    B << 16 +    (= B *    65536)
    C <<  8 +    (= C *      256)
    D
    

    在小端机器上,当四字节数组 ABCD 转换为整数时,它会以 A 作为最低有效字节而不是最高有效字节。

    我不编写 vb.net 代码,但敲出一个可以做到这一点的函数应该很简单。

    不过,您首先需要确保 A - D 都在 0 .. 255 范围内!

    【讨论】:

      【解决方案4】:

      这可能行得通,将尝试看看。

      public double IPAddressToNumber(string IPaddress)
          {
              int i;
              string [] arrDec;
              double num = 0;
              if (IPaddress == "")
              {
                  return 0;
              }
              else
              {
                  arrDec = IPaddress.Split('.');
                  for(i = arrDec.Length - 1; i >= 0 ; i = i -1)
                      {
                          num += ((int.Parse(arrDec[i])%256) * Math.Pow(256 ,(3 - i )));
                      }
                  return num;
              }
          }
      

      【讨论】:

      • 你的代码应该返回一个 long 或 Int64 而不是一个 double
      • 另外,在循环中,只需将上一次迭代的值乘以 256,然后然后添加下一个八位字节。保存所有对 Math.pow 的调用!
      猜你喜欢
      • 1970-01-01
      • 2011-10-17
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      相关资源
      最近更新 更多