zoukankan      html  css  js  c++  java
  • C# IP地址与整数之间的转换

    IP地址与整数之间的转换

    1、IP地址转换为整数

    原理:IP地址每段可以看成是8位无符号整数即0-255,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成一个无符号的32位整数。

    举例:一个ip地址为10.0.3.193

    每段数字 相对应的二进制数
    10 00001010
    0 00000000
    3 00000011
    193 11000001
    组合起来即为:00001010 00000000 00000011 11000001,转换为10进制就是:167773121,即该IP地址转换后的数字就是它了。

    C#代码:

            public static long IpToInt(string ip)
            {
                char[] separator = new char[] { '.' };
                string[] items = ip.Split(separator);
                return long.Parse(items[0]) << 24
                        | long.Parse(items[1]) << 16
                        | long.Parse(items[2]) << 8 
                        | long.Parse(items[3]);
            }

    2、整数转换为IP地址

    原理:把这个整数转换成一个32位二进制数。从左到右,每8位进行一下分割,得到4段8位的二进制数,把这些二进制数转换成整数然后加上”.”,就是这个ip地址了。

    举例,整数:167773121

    二进制表示形式为:00001010 00000000 00000011 11000001
    分割成四段:00001010,00001010,00000011,11000001,分别转换为整数后加上“.”就得到了10.0.3.193。

    C#代码:

            public static string IntToIp(long ipInt)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append((ipInt >> 24) & 0xFF).Append(".");
                sb.Append((ipInt >> 16) & 0xFF).Append(".");
                sb.Append((ipInt >> 8) & 0xFF).Append(".");
                sb.Append(ipInt & 0xFF);
                return sb.ToString();
            }

    3、使用System.Net下的IPAddress类

    IPAddress.Parse() 将 IP 地址字符串转换为 IPAddress 实例。

    IPAddress.ToString() 将 Internet 地址转换为标准表示法。

    C#代码:

            static void Main(string[] args)
            {
                string ip = "10.0.3.193";
                long ipInt = IpToInt(ip);
                Console.WriteLine(ipInt);
                Console.WriteLine(IntToIp(ipInt));
    
                //使用long ulong int 会溢出,使用uint就没问题
                uint netInt = (uint)IPAddress.HostToNetworkOrder((Int32)ipInt);
                IPAddress ipaddr = new IPAddress((long)netInt);
                IPAddress ipaddr1 = IPAddress.Parse(ip);
                Console.WriteLine(ipaddr.ToString());
                Console.WriteLine(ipaddr1.ToString());
    
                Console.ReadKey();
            }


     

  • 相关阅读:
    SQL Azure (17) SQL Azure V12
    Microsoft Azure News(5) Azure新DV2系列虚拟机上线
    Azure Redis Cache (3) 在Windows 环境下使用Redis Benchmark
    Azure PowerShell (11) 使用自定义虚拟机镜像模板,创建Azure虚拟机并绑定公网IP(VIP)和内网IP(DIP)
    Windows Azure Virtual Machine (31) 迁移Azure虚拟机
    Windows Azure Web Site (16) Azure Web Site HTTPS
    Azure China (12) 域名备案问题
    一分钟快速入门openstack
    管理员必备的Linux系统监控工具
    Keepalived+Nginx实现高可用和双主节点负载均衡
  • 原文地址:https://www.cnblogs.com/luxiaoxun/p/3376682.html
Copyright © 2011-2022 走看看