如何显示IPAddress的Integer值

时间:2009-01-21 14:36:17

标签: c# vb.net ip-address

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

...然而

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

e.g。对于IP 58.0.0.0,System.Net命名空间给我的值为58 ... 实际上,整数值应为973078528

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

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

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

此公式正确的原因是它返回的数字可以在> =和< =查询中使用,以确定属于某个范围的IP地址。

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

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

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

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

作为通用功能,如果您的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范围内!

答案 2 :(得分:0)

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

示例代码列在选择的答案

电子; f,b

答案 3 :(得分:0)

这可能有用,会尝试看看。

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;
        }
    }