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();
        }
复制代码


 

作者: 阿凡卢
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
http://www.cnblogs.com/luxiaoxun/p/3376682.html
相关文章
|
jenkins 持续交付 网络安全
Jenkins安装SSH插件
Jenkins安装SSH插件
282 0
|
机器学习/深度学习 传感器 数据采集
机器学习赋能制造业:预测性维护、质量控制和智能物流优化
制造业借助机器学习和深度学习提升效率,通过预测性维护避免设备故障,利用质量控制模型检测产品缺陷,及运用智能物流优化降低运输成本。示例代码包括基于LSTM的设备故障预测和随机森林分类器的质量控制模型。这些技术革新生产流程,提高效率,降低成本,增强企业竞争力。
|
存储 持续交付 云计算
云计算——云计算关键技术
云计算——云计算关键技术
4659 0
|
9月前
|
Linux 开发工具 git
【Git】Git 完全指南:从入门到精通
Git 是一种强大的版本控制工具,掌握了其基本命令和高级特性后,可以大大提高开发效率并方便团队协作。通过本篇文章,你已经学会了 Git 的核心命令及其使用方法,希望你能够灵活运用 Git 在实际项目中进行版本管理。
2661 4
|
9月前
|
机器学习/深度学习 算法 数据可视化
基于深度混合架构的智能量化交易系统研究: 融合SSDA与LSTM自编码器的特征提取与决策优化方法
本文探讨了在量化交易中结合时序特征和静态特征的混合建模方法。通过整合堆叠稀疏降噪自编码器(SSDA)和基于LSTM的自编码器(LSTM-AE),构建了一个能够全面捕捉市场动态特性的交易系统。SSDA通过降噪技术提取股票数据的鲁棒表示,LSTM-AE则专注于捕捉市场的时序依赖关系。系统采用A2C算法进行强化学习,通过多维度的奖励计算机制,实现了在可接受的风险水平下最大化收益的目标。实验结果显示,该系统在不同波动特征的股票上表现出差异化的适应能力,特别是在存在明确市场趋势的情况下,决策准确性较高。
240 5
基于深度混合架构的智能量化交易系统研究: 融合SSDA与LSTM自编码器的特征提取与决策优化方法
|
编译器 C# Windows
C#基础:手动编译一个.cs源代码文件并生成.exe可执行文件
通过上述步骤,应该能够高效准确地编译C#源代码并生成相应的可执行文件。此外,这一过程强调了对命令行编译器的理解,这在调试和自动化编译流程中是非常重要的。
944 2
|
缓存 Ubuntu 前端开发
在Ubuntu上手动与自动启动Nginx的踩坑经历、以及重启服务
本文分享了作者在Ubuntu系统上手动和自动启动Nginx服务的踩坑经历,包括创建启动脚本、解决依赖问题、配置服务自动启动以及通过命令行管理Nginx服务的方法。
758 0
在Ubuntu上手动与自动启动Nginx的踩坑经历、以及重启服务
|
API 容器
【鸿蒙软件开发】ArkUI之Column、ColumnSplit组件
【鸿蒙软件开发】ArkUI之Column、ColumnSplit组件
509 0
【鸿蒙软件开发】ArkUI之Column、ColumnSplit组件
|
C# Windows
C#捕获windows关机事件,在系统关机前做一些自己想做的事
C#捕获windows关机事件,在系统关机前做一些自己想做的事; 有些时候我们可能想在Windows关机时记录或处理一些事情,这里提供几种方法。 方法一: /// /// 窗口过程的回调函数 /// /// ...
1945 0
|
Web App开发 Linux 网络安全