IP地址与整数的互换算法[转]

发布于:
分类: Microsoft.Net Tagged

由于常规的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);
}

 

 

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注