我正在查看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实例)不会计算/返回此值。任何知道为什么地址属性不会返回我认为正确答案的人的奖励点......
其他链接中的其他示例也不起作用。
答案 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)
答案 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;
}
}