C#中IP地址与数字之间的互转
来源:互联网 发布:centos 6.5 snmp配置 编辑:程序博客网 时间:2024/05/22 07:53
项目中有IP与Int32类型相互转换的需求,于是在网上搜索了相关代码,但发现网上的代码有Bug,加以修改发布如下:
/// <summary>
/// 将IPv4格式的字符串转换为int型表示
/// </summary>
/// <param name="strIPAddress">IPv4格式的字符</param>
/// <returns></returns>
public static int IPToNumber(string strIPAddress)
{
//将目标IP地址字符串strIPAddress转换为数字
string[] arrayIP = strIPAddress.Split('.');
int sip1 = Int32.Parse(arrayIP[0]);
int sip2 = Int32.Parse(arrayIP[1]);
int sip3 = Int32.Parse(arrayIP[2]);
int sip4 = Int32.Parse(arrayIP[3]);
int tmpIpNumber;
tmpIpNumber = sip1 * 256 * 256 * 256 + sip2 * 256 * 256 + sip3 * 256 + sip4;
return tmpIpNumber;
}
/// <summary>
/// 将int型表示的IP还原成正常IPv4格式。
/// </summary>
/// <param name="intIPAddress">int型表示的IP</param>
/// <returns></returns>
public static string NumberToIP(int intIPAddress)
{
int tempIPAddress;
//将目标整形数字intIPAddress转换为IP地址字符串
//-1062731518 192.168.1.2
//-1062731517 192.168.1.3
if (intIPAddress >= 0)
{
tempIPAddress = intIPAddress;
}
else
{
tempIPAddress = intIPAddress + 1;
}
int s1 = tempIPAddress / 256 / 256 / 256;
int s21 = s1 * 256 * 256 * 256;
int s2 = (tempIPAddress - s21) / 256 / 256;
int s31 = s2 * 256 * 256 + s21;
int s3 = (tempIPAddress - s31) / 256;
int s4 = tempIPAddress - s3 * 256 - s31;
if (intIPAddress < 0)
{
s1 = 255 + s1;
s2 = 255 + s2;
s3 = 255 + s3;
s4 = 255 + s4;
}
string strIPAddress = s1.ToString() + "." + s2.ToString() + "." + s3.ToString() + "." + s4.ToString();
return strIPAddress;
}
主要修改了 ConvertNumberToIPAddress 方法。原来的代码是什么样子各位在网上搜来看看就知道,运行时的Bug举例:
原始IP 转化后的数字 通过数字还原出来的IP
0.0.0.0 0 0.0.0.1
255.0.0.0 -167772160.-255.-255.-255
255.255.0.0 -655360.0.-255.-255
118.119.250.24 1987574296118.119.250.25
0.0.0.255 255 0.0.1.0
……
上面仅是IP与Int32之间的互转,至于与uint之间的互转网上也有代码,未进行深入测试。
/// <summary>
/// 将IPv4格式的字符串转换为int型表示
/// </summary>
/// <param name="strIPAddress">IPv4格式的字符</param>
/// <returns></returns>
public static int IPToNumber(string strIPAddress)
{
//将目标IP地址字符串strIPAddress转换为数字
string[] arrayIP = strIPAddress.Split('.');
int sip1 = Int32.Parse(arrayIP[0]);
int sip2 = Int32.Parse(arrayIP[1]);
int sip3 = Int32.Parse(arrayIP[2]);
int sip4 = Int32.Parse(arrayIP[3]);
int tmpIpNumber;
tmpIpNumber = sip1 * 256 * 256 * 256 + sip2 * 256 * 256 + sip3 * 256 + sip4;
return tmpIpNumber;
}
/// <summary>
/// 将int型表示的IP还原成正常IPv4格式。
/// </summary>
/// <param name="intIPAddress">int型表示的IP</param>
/// <returns></returns>
public static string NumberToIP(int intIPAddress)
{
int tempIPAddress;
//将目标整形数字intIPAddress转换为IP地址字符串
//-1062731518 192.168.1.2
//-1062731517 192.168.1.3
if (intIPAddress >= 0)
{
tempIPAddress = intIPAddress;
}
else
{
tempIPAddress = intIPAddress + 1;
}
int s1 = tempIPAddress / 256 / 256 / 256;
int s21 = s1 * 256 * 256 * 256;
int s2 = (tempIPAddress - s21) / 256 / 256;
int s31 = s2 * 256 * 256 + s21;
int s3 = (tempIPAddress - s31) / 256;
int s4 = tempIPAddress - s3 * 256 - s31;
if (intIPAddress < 0)
{
s1 = 255 + s1;
s2 = 255 + s2;
s3 = 255 + s3;
s4 = 255 + s4;
}
string strIPAddress = s1.ToString() + "." + s2.ToString() + "." + s3.ToString() + "." + s4.ToString();
return strIPAddress;
}
主要修改了 ConvertNumberToIPAddress 方法。原来的代码是什么样子各位在网上搜来看看就知道,运行时的Bug举例:
原始IP 转化后的数字 通过数字还原出来的IP
0.0.0.0 0 0.0.0.1
255.0.0.0 -167772160.-255.-255.-255
255.255.0.0 -655360.0.-255.-255
118.119.250.24 1987574296118.119.250.25
0.0.0.255 255 0.0.1.0
……
上面仅是IP与Int32之间的互转,至于与uint之间的互转网上也有代码,未进行深入测试。
0 0
- C#中IP地址与数字之间的互转
- Java - IP地址与数字之间互转
- C# IP地址和整数之间的转换,IP地址和数字ip地址的转换
- java IP地址与数字之间的转换
- ip地址在数字与字符串之间的相互转换
- IP地址转换:数字与字符串之间的转换
- ip地址与数字之间互换
- C# IP地址与整数之间的转换
- C#扫描IP中关于IP地址合法性,数字字符互转函数
- JAVA IP地址与数字互转
- 【转】IP地址与整数之间的转换
- IP地址与整数之间的转换
- IP地址与整数之间的转换
- IP地址与整数之间的转换
- IP地址与整数之间的转换
- ip地址与整数之间的转换
- 子网掩码与IP地址之间的关系
- ip地址与整数之间的转换
- A*
- 从bodyParse来看app.use()
- 共面点成像——planar homography
- 设置cell背景
- Android如何愉快的使用Spinner列表选择框
- C#中IP地址与数字之间的互转
- MinGW 与 MSVC 生成 DLL 各种情况的折腾笔记
- spring quartz
- node.js连接mysql的方法
- 突出一个简单粗暴!Android Activity泄漏问题解决方案
- 《剑指offer》栈的压入、弹出序列
- zookeeer 集群和伪集群模式
- Mybatis各种查询,一对一,一对多,嵌套
- 解决IllegalStateException: Can not perform this action after onSaveInstanceState