0

我正在查看 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

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

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

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

4

4 回答 4

3

请参阅如何在 C# 中将 IPv4 地址转换为整数?

于 2009-01-21T14:38:58.737 回答
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 范围内!

于 2009-01-21T15:10:07.457 回答
0

如何在 C# 中将 IPv4 地址转换为整数?

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

e; f, b

于 2009-01-21T14:39:39.217 回答
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;
        }
    }
于 2009-01-21T16:56:11.330 回答