c#.net提供的方法:把整型值和字符串IP互转!

    技术2022-05-20  47

    .net提供的方法转换IP地址// 字符串转换为数字System.Net.IPAddress ipaddress = System.Net.IPAddress.Parse("216.20.222.72");long dreamduip = ipaddress.Address;// 结果 1222513880// 数字转换为字符串System.Net.IPAddress ipaddress = System.Net.IPAddress.Parse(dreamduip.ToString());string strdreamduip = ipaddress.ToString();通用转换函数

     程序代码 /// <summary>将IP地址格式化为整数型</summary> /// <param name="ip"></param> /// <returns></returns> public static long IpToInt(string ip) {     char[] dot = new char[] { '.' };     string[] ipArr = ip.Split(dot);     if (ipArr.Length == 3)ip = ip + ".0";     ipArr = ip.Split(dot);long ip_Int = 0;     long p1 = long.Parse(ipArr[0]) * 256 * 256 * 256;     long p2 = long.Parse(ipArr[1]) * 256 * 256;     long p3 = long.Parse(ipArr[2]) * 256;long p4 = long.Parse(ipArr[3]);     ip_Int = p1 + p2 + p3 + p4;return ip_Int; }

    我们知道 IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。按照TCP/IP协议规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节。而c#中int32的数就是四个字节的,但是符号要占掉一位所以就不够了,但是无符号的 UInt32 就没有这样的问题。所以理论上讲:UInt32是可以完整保存一个IP地址的。那下面的两个方法就是对IP与UInt32之间的互转换。

     程序代码 public static string Int2IP(UInt32 ipCode) {             byte a = (byte)((ipCode & 0xFF000000) >> 0x18);             byte b = (byte)((ipCode & 0x00FF0000) >> 0xF);             byte c = (byte)((ipCode & 0x0000FF00) >> 0x8);             byte d = (byte)(ipCode & 0x000000FF);             string ipStr = String.Format("{0}.{1}.{2}.{3}", a, b, c, d);             return ipStr;         }

     

     程序代码 public static UInt32 IP2Int(string ipStr) {             string[] ip = ipStr.Split('.');             uint ipCode = 0xFFFFFF00 | byte.Parse(ip[3]);             ipCode = ipCode & 0xFFFF00FF | (uint.Parse(ip[2]) << 0x8);             ipCode = ipCode & 0xFF00FFFF | (uint.Parse(ip[1]) << 0xF);             ipCode = ipCode & 0x00FFFFFF | (uint.Parse(ip[0]) << 0x18);             return ipCode;         }


    最新回复(0)