找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2271|回复: 12

C# IP地址与整数之间的相互转换, ip to long

 火.. [复制链接]
  • 打卡等级:即来则安
  • 打卡总天数:27
  • 打卡月天数:6
  • 打卡总奖励:7736
  • 最近打卡:2025-12-20 00:35:11

3317

主题

285

回帖

2万

积分

管理员

积分
23881
发表于 2021-8-29 11:21:44 | 显示全部楼层 |阅读模式
C# IP与整数之间的相互转换, ip to long

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#代码:
  1. /// <summary>
  2. /// ip转换为长整型
  3. /// </summary>
  4. /// <param name="ip">ip字符串</param>
  5. /// <returns>长整型</returns>
  6. public static long IpToLong(string ip)
  7. {
  8.     char[] separator = new char[] { '.' };
  9.     string[] items = ip.Split(separator);
  10.     return long.Parse(items[0]) << 24
  11.             | long.Parse(items[1]) << 16
  12.             | long.Parse(items[2]) << 8
  13.             | long.Parse(items[3]);
  14. }
复制代码

2、整数转换为IP地址

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

举例,整数:167773121

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

C#代码:
  1. /// <summary>
  2. /// 长整型转换为ip
  3. /// </summary>
  4. /// <param name="ip">长整型</param>
  5. /// <returns>ip字符串</returns>
  6. public static string LongToIp(long ip)
  7. {
  8.     StringBuilder sb = new StringBuilder();
  9.     sb.Append((ip >> 24) & 0xFF).Append(".");
  10.     sb.Append((ip >> 16) & 0xFF).Append(".");
  11.     sb.Append((ip >> 8) & 0xFF).Append(".");
  12.     sb.Append(ip & 0xFF);
  13.     return sb.ToString();
  14. }
复制代码

[size=1em]
[/table]

使用:
  1. static void Main(string[] args)
  2. {
  3.     string ip = "10.0.3.193";
  4.     long ipLong = 167773121;
  5.     Console.WriteLine("10.0.3.193->long: " + IpToLong(ip));
  6.     Console.WriteLine("167773121->ip: " + LongToIp(ipLong));
  7.     Console.WriteLine("");
  8.     Console.WriteLine("0.0.0.0->long: " + IpToLong("0.0.0.0"));
  9.     Console.WriteLine("255.255.255.255->long: " + IpToLong("255.255.255.255"));

  10.     Console.Read();
  11. }
复制代码
[size=1em][table=98%,none]




工控课堂 www.gkket.com

0

主题

89

回帖

265

积分

注册会员

积分
265
发表于 2021-8-29 11:21:44 | 显示全部楼层
楼主加油,我们都看好你哦。
工控课堂 www.gkket.com

0

主题

104

回帖

236

积分

注册会员

积分
236
发表于 2021-8-29 11:56:09 | 显示全部楼层
加油,加油,不要沉下去,我是最热贴
工控课堂 www.gkket.com

0

主题

169

回帖

432

积分

注册会员

积分
432
发表于 2025-11-13 11:30:27 | 显示全部楼层
学到干货了,感谢分享,已火速收藏
工控课堂 www.gkket.com

7

主题

139

回帖

758

积分

中级会员

积分
758
发表于 2025-11-13 14:57:31 | 显示全部楼层
来凑个热闹,增加点人气~
工控课堂 www.gkket.com

0

主题

81

回帖

123

积分

新手上路

积分
123
发表于 2025-11-14 17:27:04 | 显示全部楼层
楼主辛苦啦,期待下一篇分享!
工控课堂 www.gkket.com

0

主题

1451

回帖

4571

积分

金牌会员

积分
4571
发表于 2025-11-14 17:44:52 | 显示全部楼层
这评论区卧虎藏龙,个个都是人才!
工控课堂 www.gkket.com

0

主题

95

回帖

146

积分

新手上路

积分
146
发表于 2025-11-14 18:05:13 | 显示全部楼层
说得对!狠狠赞同,没毛病~
工控课堂 www.gkket.com

0

主题

71

回帖

107

积分

新手上路

积分
107
发表于 2025-11-14 19:24:29 | 显示全部楼层
救命!这波发言太秀了,直接原地封神~
疯狂认同!楼主说出了我不敢说的话
工控课堂 www.gkket.com

0

主题

96

回帖

152

积分

新手上路

积分
152
发表于 2025-11-14 21:54:03 | 显示全部楼层
笑不活了,评论区比正文还精彩
已转发给朋友,一起快乐一下
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-22 13:30 , Processed in 0.079478 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表