将IP地址转换成等效的数字!!很急! /// 将IP地址字符串转换成等效的数字值 /// </summary> /// <param name="ip">IP地址</param> /// <returns>返回IP数字值</returns> public static int IPToInt ( string ip ) { String[] Ip = ip.Split('.'); return; }怎么返回? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你的方式就是去掉了IP地址段中的.组成的int类型,int32的最大值2,147,483,647,大多数IP地址都超过了这个值,所以弄Int64的类型来存储int64 _return = Convert.ToInt64(ip.Replace(".", "")); public static int IPToInt ( string ip ) { int retval = 0; String[] aip = ip.Split('.'); for(int i=0;i<4;i++) { retval = retval + (int)aip[4-i] << 8*i; } return retval; } to veryhappy(wx.net):int 32位,4个字节,每个字节可以存放 0-255的数字 Private string GetHostName(){ String strIp ; String strHostName= Dns.GetHostName; IPHostEntry ipEntry = Dns.GetHostByName(strHostName) IPAddress IpAddr() = ipEntry.AddressList For(i=0,i< IpAddr.Length ;i++) { strIp = IpAddr(i).ToString() }} 不过应该是uint,而不是intpublic static int IPToInt ( string ip ) { uint retval = 0; String[] aip = ip.Split('.'); for(int i=0;i<4;i++) { retval = retval + (uint)aip[4-i] << 8*i; } return (int)retval; } to viena(EQ<0) : 能解释一下你的程序吗?谢谢! 以"."分割到4个元素的数组,从最后一个开始,强制转为32位无符号整数因为范围小于255,只有低8位有效,高位全是0下一个8位,左移8位,放到9-16位一次累加,得到一个32位Unit最后强制装换为有符号数,比如最大值会变为-1 to viena(EQ<0),在下面的语句中,retval = retval + (uint)aip[4-i] << 8*i;aip[4-i]为"string"类型,无法转换为"uint" /// 将IP地址字符串转换成等效的数字值 /// </summary> /// <param name="ip">IP地址</param> /// <returns>返回IP数字值</returns> public static Int64IPToInt ( string ip ) { Int64 result = Convert.ToInt64(ip.Replace(".", "")); return result ; } 窗口之间通过委托传值监听的问题 水晶报表大量数据的问题? mapx图上加一点 标注要自己写 怎么实现 关于vs2003调试问题 c++与c#通讯中如何包含c#中的类(类似 c++返回给c#的结构中包含c#类的指针) 装完VS2003后怎么无法安装IIS? 异常处理? 【期待MVP回复】算法讨论 C#-打开所有串口失败(只有当端口打开时,BaseStream才可以用)----------在线等 求救各位大虾~~~~ 关于正则表达式和indexOf的速度比较?? [急]关于Net2003中团队开发,程序集引用的问题
{
int retval = 0;
String[] aip = ip.Split('.');
for(int i=0;i<4;i++)
{
retval = retval + (int)aip[4-i] << 8*i;
}
return retval;
}
{
String strIp ;
String strHostName= Dns.GetHostName;
IPHostEntry ipEntry = Dns.GetHostByName(strHostName)
IPAddress IpAddr() = ipEntry.AddressList
For(i=0,i< IpAddr.Length ;i++)
{
strIp = IpAddr(i).ToString()
}
}
{
uint retval = 0;
String[] aip = ip.Split('.');
for(int i=0;i<4;i++)
{
retval = retval + (uint)aip[4-i] << 8*i;
}
return (int)retval;
}
能解释一下你的程序吗?谢谢!
从最后一个开始,强制转为32位无符号整数
因为范围小于255,只有低8位有效,高位全是0
下一个8位,左移8位,放到9-16位
一次累加,得到一个32位Unit
最后强制装换为有符号数,比如最大值会变为-1
在下面的语句中,
retval = retval + (uint)aip[4-i] << 8*i;
aip[4-i]为"string"类型,无法转换为"uint"
/// </summary>
/// <param name="ip">IP地址</param>
/// <returns>返回IP数字值</returns>
public static Int64IPToInt ( string ip )
{
Int64 result = Convert.ToInt64(ip.Replace(".", ""));
return result ;
}