今天搞了一个QQ的纯真版IP数据库,想到了IP地址与无符号整数互换的问题,在网上找了很多,但大多数有这样那样的问题,特别是由无符号整数转换为IP地址的比较少,后来找到一个JS版的,对其进行了C#化,测试了一下,基本正常,用得到的朋友请支持一下:
/// <summary>
/// 将无符号整数转换成IP地址
/// </summary>
/// <param name="ipvalue">无符号整数</param>
/// <returns>IP地址</returns>
public static string ConvertUintToIp(uint ipvalue)
{
string ip = string.Empty;
if (ipvalue >= 0 && ipvalue <= 4294967295)
{
for (int i = 3; i >= 0; i--)
{
ip += Math.Floor(ipvalue / Math.Pow(256, i));
if (i > 0)
{
ip += ".";
ipvalue %= (uint)Math.Pow(256, i);
}
}
}
return ip;
}
/// 将无符号整数转换成IP地址
/// </summary>
/// <param name="ipvalue">无符号整数</param>
/// <returns>IP地址</returns>
public static string ConvertUintToIp(uint ipvalue)
{
string ip = string.Empty;
if (ipvalue >= 0 && ipvalue <= 4294967295)
{
for (int i = 3; i >= 0; i--)
{
ip += Math.Floor(ipvalue / Math.Pow(256, i));
if (i > 0)
{
ip += ".";
ipvalue %= (uint)Math.Pow(256, i);
}
}
}
return ip;
}
/// <summary>
/// 将IP地址转换成无符号整数
/// </summary>
/// <param name="ip">IP地址</param>
/// <returns>无符号整数</returns>
public static uint ConvertIpToUint(string ip)
{
uint ipvalue = 0;
System.Net.IPAddress ipadress;
if (System.Net.IPAddress.TryParse(ip, out ipadress))
{
string[] ips = ipadress.ToString().Split('.');
for (int i = 0; i < ips.Length; i++)
{
ipvalue += uint.Parse(ips[i]) * (uint)Math.Pow(256, ips.Length - 1 - i);
}
}
return ipvalue;
}
/// 将IP地址转换成无符号整数
/// </summary>
/// <param name="ip">IP地址</param>
/// <returns>无符号整数</returns>
public static uint ConvertIpToUint(string ip)
{
uint ipvalue = 0;
System.Net.IPAddress ipadress;
if (System.Net.IPAddress.TryParse(ip, out ipadress))
{
string[] ips = ipadress.ToString().Split('.');
for (int i = 0; i < ips.Length; i++)
{
ipvalue += uint.Parse(ips[i]) * (uint)Math.Pow(256, ips.Length - 1 - i);
}
}
return ipvalue;
}