如何判断一个IP地址在某个区间只内,例如在(255.0.0.1-238.0.0.1)之间,越简单越好。 如何判断一个IP地址在某个区间只内,例如在(255.0.0.1-238.0.0.1)之间,越简单越好。最先回答者全给分,顶者有分,回复者有分 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 将ip按“.”split,然后比较4个数字即可。 按照你上面的,只要判断前面的一部分就行如 int value=int.Parase(ip.substring(0,ip.indexof(".")));if(value>=255 && value<238){return true;} using System.Net;long ipstar= IPAddress.Parse("255.0.0.1").Address;long ipend = IPAddress.Parse("238.0.0.1").Address;然后同样取得给定ip的long值,判断是否在ipstar-ipend区间内就成了 static void Main() { string ip1 = "238.0.0.1"; string ip2 = "255.0.0.1"; string ipt = "240.1.2.3"; uint u1 = GetUint(ip1); uint u2 = GetUint(ip2); uint ut = GetUint(ipt); if(u1 > u2) { uint t = u1; u1 = u2; u2 = t; } Console.WriteLine(u1 <= ut && ut <= u2); } static uint GetUint(string ip) { IPAddress.Parse(ip);//判断格式是否正确。如果格式有误,这里会抛出一个FormatException string [] s = ip.Split('.'); return uint.Parse(s[0]) << 24 | uint.Parse(s[1]) << 16 | uint.Parse(s[2]) << 8 | uint.Parse(s[3]); } 这个东西在 LittleEndian 平台上是不对的。数值在cpu内部的存储是反的。 简单的思路是全部字符串通过IPAddress.Parse编程IPAddress,然后通过GetAddressBytes拿到byte数组来直接算。因为可以做位运算,应该会比较快。 "简单的思路是全部字符串通过IPAddress.Parse编程IPAddress,然后通过GetAddressBytes拿到byte数组来直接算。因为可以做位运算,应该会比较快。"比较强悍!!!!顶 其实一个ip地址对应的有一个long的类型的数值的这个你可以从网上很多例子中查到找的既然一个ip地址对应一个long 那么你可以把区间设置为 大于等于小的ip地址对应的long型数字,然后小于等于大ip地址对应的大的long型的数字就可以取到该ip地址对应的区间了其实做法就是把ip地址转成对应的long型的数字如果你懂基础,其实也就是 对每个数字进行多少位的便宜 比如 255<<24还是要自己理解的有点7楼说的味道 将IP地址转换成无符号整数,然后判断就可以了/// <summary>/// 将IP地址转换成无符号整数/// </summary>/// <param name="ip">IP地址</param>/// <returns>无符号整数</returns>public static uint ConvertIpToUint(string ip){ uint ipvalue = 0; System.Net.IPAddress ipadress; if (System.Net.IPAddress.TryParse(ip, out ipadress)) { string[] ips = ipadress.ToString().Split('.'); for (int i = 0; i < ips.Length; i++) { ipvalue += uint.Parse(ips[i]) * (uint)Math.Pow(256, ips.Length - 1 - i); } } return ipvalue;} 怎么做把C/S程序做成一个B/S插件 关于获得窗口控件句柄的问题,急!!!!!!!!! 关于C#中的define问题 用C#编程时,遇到以下错误提示,应如何解决? 调用一次WS2_32.recv(),是不是对应一个封包,还是多个封包? 请关注ASP.NET与C#打包问题 请教c#中的一个小问题,马上给分!!! Visal C++ WinForm 窗体去掉标题栏以后,移动窗体之前怎么获取虚框 c#winform窗体axShockwaveFlash1的加载和播放代码 WinForm程序如何兼容分辨率? C# socket问题 winform问题
只要判断前面的一部分就行如 int value=int.Parase(ip.substring(0,ip.indexof(".")));
if(value>=255 && value<238)
{
return true;
}
long ipstar= IPAddress.Parse("255.0.0.1").Address;
long ipend = IPAddress.Parse("238.0.0.1").Address;然后同样取得给定ip的long值,判断是否在ipstar-ipend区间内就成了
{
string ip1 = "238.0.0.1";
string ip2 = "255.0.0.1";
string ipt = "240.1.2.3";
uint u1 = GetUint(ip1);
uint u2 = GetUint(ip2);
uint ut = GetUint(ipt);
if(u1 > u2)
{
uint t = u1;
u1 = u2;
u2 = t;
}
Console.WriteLine(u1 <= ut && ut <= u2);
}
static uint GetUint(string ip)
{
IPAddress.Parse(ip);//判断格式是否正确。如果格式有误,这里会抛出一个FormatException
string [] s = ip.Split('.');
return uint.Parse(s[0]) << 24 | uint.Parse(s[1]) << 16 | uint.Parse(s[2]) << 8 | uint.Parse(s[3]);
}
数值在cpu内部的存储是反的。
这个你可以从网上很多例子中查到找的
既然一个ip地址对应一个long
那么你可以把区间设置为 大于等于小的ip地址对应的long型数字,然后小于等于大ip地址对应的大的long型的数字
就可以取到该ip地址对应的区间了
其实做法就是把ip地址转成对应的long型的数字
如果你懂基础,其实也就是 对每个数字进行多少位的便宜 比如 255<<24
还是要自己理解的有点7楼说的味道
/// 将IP地址转换成无符号整数
/// </summary>
/// <param name="ip">IP地址</param>
/// <returns>无符号整数</returns>
public static uint ConvertIpToUint(string ip)
{
uint ipvalue = 0;
System.Net.IPAddress ipadress;
if (System.Net.IPAddress.TryParse(ip, out ipadress))
{
string[] ips = ipadress.ToString().Split('.');
for (int i = 0; i < ips.Length; i++)
{
ipvalue += uint.Parse(ips[i]) * (uint)Math.Pow(256, ips.Length - 1 - i);
}
}
return ipvalue;
}