2009-01-21 41 views
0

我在查看System.Net命名空間,並且它有一個可以使用的IPAddress實例。這有一個Parse方法,您可以使用它來將字符串解析爲IPInstance,然後使用Address屬性爲您提供長整型值。如何顯示IPAddress的整數值

但是...

返回的數字不是真正的轉換。

例如對於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

http://stackoverflow.com/questions/461742/how-to-convert-an-ip-address-into-an-integer-in-c 重複。 – 2009-01-21 20:27:34

+0

上一個問題提供的答案滿足了這個問題,我的問題稍有不同,另一個問題提供的答案對我來說不正確。 – Coolcoder 2009-01-22 08:05:10

回答

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; 
     } 
    } 
3
+0

該問題需要C#解決方案。這個問題是爲.NET – lkessler 2009-01-21 15:06:44

+0

我不明白你的意思是「BitConverter.ToInt32(System.Net.IPAddress。解析( 地址).GetAddressBytes(),0);「*是*一個.NET解決方案。 – 2009-01-21 16:53:54

1

你所看到的似乎是一個endian問題。

作爲一個通用的功能,如果你的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範圍內,