由于常规的IP地址(IPV4),是点分十进制表示的,是由4段 0 ~255 之间的10进制数表示的。所以,很明显的可以得出 IP地址实际上是一个32位正整数 。在C#中,uint的取值范围是 0 ~ 4,294,967,295,所以,可以完全胜任了。
但是,由于数据库中的数据类型和C#的数据类型的对应关系,有所差异,如果要考虑到存储到数据库中,那么需要考虑使用bigint的方式(特指SQL SERVER),对应于C#中,我们使用long类型。
/// <summary> /// 将IP地址转为数值形式 /// </summary> /// <returns>长整数</returns> public static long ToDigit(IPAddress ip) { int x = 3; long l = 0; foreach (byte b in ip.GetAddressBytes()) { l += (long)b << 8 * x--; } return l; } /// <summary> /// 将数值转换为IP地址 /// </summary> /// <returns>IP地址</returns> public static IPAddress ToIP(long l) { var bt = new byte[4]; for (int i = 0; i < 4; i++) { bt[3 - i] = (byte)(l >> 8 * i); } return new IPAddress(bt); }