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 アドレスを特定できるためです。

Address プロパティ (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

リトル エンディアン マシンでは、4 バイト配列 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 に答える