C#如何高效率的比较两个IP地址的大小

编程爱好者L 2010-10-27 11:28:15
string startIp="192.168.10.222";
string endIp="192.168.10.233";
就拿上面两个ip为例,如果我把每一位都乘以不同个数的255付给一个long型的变量,这样比较如果一个ip地址很大也会超出long的长度,得到的结果将是-1.各位大虾该怎么解决........
...全文
769 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
viena 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 qq123592624 的回复:]
引用 14 楼 viena 的回复:
最基本的数据类型都搞不清楚,也敢做编程?

我才刚刚接触TCP都不到一个月....什么东西都是从不会到会的...什么都知道了还学什么,我不相信你一开始就什么都知道...
[/Quote]
编程最基本的是语言,语言最基本的是基本数据类型
你对C#最基本的东西都搞不清楚,就敢用C#写程序?
还TCP,与TCP有啥关系?实在佩服你的思维逻辑!
拜托你开始用C#编程前先花几天时间把C#语言基础学一下~
编程爱好者L 2010-10-28
  • 打赏
  • 举报
回复
废话.......
viena 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 qq123592624 的回复:]
你也不乍样啊 两年时间我就会超过你 哈哈....
[/Quote]

你现在已经超过我了~
编程爱好者L 2010-10-28
  • 打赏
  • 举报
回复
你也不乍样啊 两年时间我就会超过你 哈哈....
编程爱好者L 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 viena 的回复:]

引用 16 楼 qq123592624 的回复:
引用 14 楼 viena 的回复:
最基本的数据类型都搞不清楚,也敢做编程?

我才刚刚接触TCP都不到一个月....什么东西都是从不会到会的...什么都知道了还学什么,我不相信你一开始就什么都知道...

编程最基本的是语言,语言最基本的是基本数据类型
你对C#最基本的东西都搞不清楚,就敢用C#写程序?
还TCP,与TCP有啥……
[/Quote]
基础我已经学了 只不过是多少的问题...
qq22345111 2010-10-27
  • 打赏
  • 举报
回复
维也纳娃娃都怎么大了?
边城的刀声 2010-10-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wanghui0380 的回复:]

System.Net.IPAddress x = System.Net.IPAddress.Parse("startIp");
var xl = BitConverter.ToUInt64(x.GetAddressBytes(), 0);
[/Quote]
收藏
wuyq11 2010-10-27
  • 打赏
  • 举报
回复
多看MSDN
static public uint IPAddressToLong(string IPAddr)
{
System.Net.IPAddress oIP=System.Net.IPAddress.Parse(IPAddr);
byte[] byteIP=oIP.GetAddressBytes();
uint ip=(uint)byteIP[3]<<24;
ip+=(uint)byteIP[2]<<16;
ip+=(uint)byteIP[1]<<8;
ip+=(uint)byteIP[0];
return ip;
}
static private uint IPAddressToLongBackwards(string IPAddr)
{
System.Net.IPAddress oIP=System.Net.IPAddress.Parse(IPAddr);
byte[] byteIP=oIP.GetAddressBytes();
uint ip=(uint)byteIP[0]<<24;
ip+=(uint)byteIP[1]<<16;
ip+=(uint)byteIP[2]<<8;
ip+=(uint)byteIP[3];
return ip;
}
qq22345111 2010-10-27
  • 打赏
  • 举报
回复
维也纳娃娃都怎么大了?
编程爱好者L 2010-10-27
  • 打赏
  • 举报
回复
var xl = BitConverter.ToUInt64(x.GetAddressBytes(), 0);
这个东西还是第一次用,以前都是Convert.ToInt32,转换类型都是用这个Convert去点
编程爱好者L 2010-10-27
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 viena 的回复:]
最基本的数据类型都搞不清楚,也敢做编程?
[/Quote]
我才刚刚接触TCP都不到一个月....什么东西都是从不会到会的...什么都知道了还学什么,我不相信你一开始就什么都知道...
编程爱好者L 2010-10-27
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 viena 的回复:]
引用 8 楼 qq123592624 的回复:
引用 2 楼 wanghui0380 的回复:
System.Net.IPAddress x = System.Net.IPAddress.Parse("startIp");
var xl = BitConverter.ToUInt64(x.GetAddressBytes(), 0);

xl是一个数组吗?执行到这里就报错了,数组长度不足.……
[/Quote]
大哥,我知道错了,我知道你很牛叉,那像我们这种菜鸟.....
viena 2010-10-27
  • 打赏
  • 举报
回复
最基本的数据类型都搞不清楚,也敢做编程?

viena 2010-10-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qq123592624 的回复:]
引用 2 楼 wanghui0380 的回复:
System.Net.IPAddress x = System.Net.IPAddress.Parse("startIp");
var xl = BitConverter.ToUInt64(x.GetAddressBytes(), 0);

xl是一个数组吗?执行到这里就报错了,数组长度不足...
[/Quote]

给了答案都看不懂,可悲啊
ToUInt64明显是转为64位无符号整数,居然说xl是数组

4个字节,是32位,ToUInt64应该是ToUInt32才对
UInt64要8个字节的,当然会报数组长度不足了~
数组长度不足
zhao_zps 2010-10-27
  • 打赏
  • 举报
回复

/// <summary>
/// 将227.5.54.54 形式的IP地址转换成10进制整数,这里没有进行任何错误处理
/// </summary>
/// <param name="strIP"></param>
/// <returns></returns>
private static long ipToLong(String strIP)
{
int j = 0;
int i = 0;
long[] ip = new long[4];
int position1 = strIP.IndexOf(".");
int position2 = strIP.IndexOf(".", position1 + 1);
int position3 = strIP.IndexOf(".", position2 + 1);
ip[0] = long.Parse(strIP.Substring(0, position1));
ip[1] = long.Parse(strIP.Substring(position1 + 1, position2 - position1 - 1));
ip[2] = long.Parse(strIP.Substring(position2 + 1, position3 - position2 - 1));
ip[3] = long.Parse(strIP.Substring(position3 + 1));
return (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];
}

转换成十进制再比较
编程爱好者L 2010-10-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wm_jawin 的回复:]
好奇怪的问题。做什么用的?
[/Quote]
监控IP段
WM_JAWIN 2010-10-27
  • 打赏
  • 举报
回复
好奇怪的问题。做什么用的?
编程爱好者L 2010-10-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 liubaofeng28 的回复:]
ip本来就是用4个字节保存的,转换回4个字节去比较就可以了。
[/Quote]
这个谁都知道....
编程爱好者L 2010-10-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wanghui0380 的回复:]
System.Net.IPAddress x = System.Net.IPAddress.Parse("startIp");
var xl = BitConverter.ToUInt64(x.GetAddressBytes(), 0);
[/Quote]
xl是一个数组吗?执行到这里就报错了,数组长度不足...
Xzoth 2010-10-27
  • 打赏
  • 举报
回复
IP地址有大小?
加载更多回复(11)

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧