4a0e94ca などの形式の 16 進値があり、それらを IP に変換する必要があります。C# でこれを行うにはどうすればよいですか?
4882 次
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 に答える