3

4a0e94ca などの形式の 16 進値があり、それらを IP に変換する必要があります。C# でこれを行うにはどうすればよいですか?

4

3 に答える 3

16

値が IPv4 アドレスを表している場合は、メソッドを使用して結果をIPAddress コンストラクターlong.Parseに渡すことができます。

var ip = new IPAddress(long.Parse("4a0e94ca", NumberStyles.AllowHexSpecifier));

それらが IPv6 アドレスを表している場合は、16 進値をバイト配列に変換してから、この IPAddress コンストラクターのオーバーロードを使用して IPAddressを構築する必要があります。

于 2009-08-30T23:01:30.607 に答える
3

さて、次の形式で IP の形式を取ります。

192.168.1.1

それを 1 つの数値にするには、各部分を OR でまとめて、左に 8 ビットシフトします。

long l = 192 | (168 << 8) | (1 << 16) | (1 << 24);

したがって、番号に対してこのプロセスを逆にすることができます。

そのようです:

int b1 = (int) (l & 0xff);
int b2 = (int) ((l >> 8) & 0xff);
int b3 = (int) ((l >> 16) & 0xff);
int b4 = (int) ((l >> 24) & 0xff);

- 編集

他のポスターはおそらくC#でそれを行う「よりクリーンな」方法を持っているので、おそらくそれを本番コードで使用しますが、私が投稿した方法はIPの形式を学ぶ良い方法だと思います.

于 2009-08-30T22:59:59.660 に答える
2

C# で整数を 16 進数に変換し、再度戻すことを確認します。

    var ip = String.Format("{0}.{1}.{2}.{3}",
    int.Parse(hexValue.Substring(0, 2), System.Globalization.NumberStyles.HexNumber),
    int.Parse(hexValue.Substring(2, 2), System.Globalization.NumberStyles.HexNumber),
    int.Parse(hexValue.Substring(4, 2), System.Globalization.NumberStyles.HexNumber),
    int.Parse(hexValue.Substring(6, 2), System.Globalization.NumberStyles.HexNumber));
于 2009-08-30T23:01:13.417 に答える