当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

c++实现ip转换为数值和数值转换为ip的功能

    本文实现的功能是:ip转换为数值, 数值转换为ip,具体代码如下:

 #include "stdafx.h"
#include <iostream>
#include <string>
//#include <windows.h>
using namespace std;

int IPToValue(const string& strIP)
{
//IP转化为数值
//没有格式检查
//返回值就是结果

    int a[4];
    string IP = strIP;
    string strTemp;
    size_t pos;
    size_t i=3;

    do
    {
        pos = IP.find(".");

        if(pos != string::npos)
        {
            strTemp = IP.substr(0,pos);
            a[i] = atoi(strTemp.c_str());
            i--;
            IP.erase(0,pos+1);
        }
        else
        {
            strTemp = IP;
            a[i] = atoi(strTemp.c_str());
            break;
        }

    }while(1);

    int nResult = (a[3]<<24) + (a[2]<<16)+ (a[1]<<8) + a[0];
    return nResult;
}

string ValueToIP(const int& nValue)
{
//数值转化为IP
//没有格式检查
//返回值就是结果

    char strTemp[20];
    sprintf( strTemp,"%d.%d.%d.%d",
        (nValue&0xff000000)>>24,
        (nValue&0x00ff0000)>>16,
        (nValue&0x0000ff00)>>8,
        (nValue&0x000000ff) );

    return string(strTemp);
}

int main(void)
{
    //对于218.92.189.40转化后-631456472
    //cout<<hex<<-631456472 <<endl;//输出da5cbd28

    string strIP= "218.92.189.40";
    cout<<dec<<IPToValue(strIP)<<endl;
    //cout<<hex<<IPToValue(strIP)<<endl;
    cout<<ValueToIP(-631456472)<<endl;

    //IP为:218.92.176.82转化后 -631459758
    strIP= "218.92.176.82";
    cout<<dec<<IPToValue(strIP)<<endl;
    //cout<<hex<<IPToValue(strIP)<<endl;
    cout<<ValueToIP(-631459758)<<endl;

    return 0 ;
}
#include "stdafx.h"
#include <iostream>
#include <string>
//#include <windows.h>
using namespace std;

int IPToValue(const string& strIP)
{
//IP转化为数值
//没有格式检查
//返回值就是结果

 int a[4];
 string IP = strIP;
 string strTemp;
 size_t pos;
 size_t i=3;

 do
 {
  pos = IP.find(".");

  if(pos != string::npos)
  {
   strTemp = IP.substr(0,pos);
   a[i] = atoi(strTemp.c_str());
   i--;
   IP.erase(0,pos+1);
  }
  else
  {
   strTemp = IP;
   a[i] = atoi(strTemp.c_str());
   break;
  }

 }while(1);

 int nResult = (a[3]<<24) + (a[2]<<16)+ (a[1]<<8) + a[0];
 return nResult;
}

string ValueToIP(const int& nValue)
{
//数值转化为IP
//没有格式检查
//返回值就是结果

 char strTemp[20];
 sprintf( strTemp,"%d.%d.%d.%d",
  (nValue&0xff000000)>>24,
  (nValue&0x00ff0000)>>16,
  (nValue&0x0000ff00)>>8,
  (nValue&0x000000ff) );
 return string(strTemp);
}

int main(void)
{
 //对于218.92.189.40转化后-631456472
 //cout<<hex<<-631456472 <<endl;//输出da5cbd28

 string strIP= "218.92.189.40";
 cout<<dec<<IPToValue(strIP)<<endl;
 //cout<<hex<<IPToValue(strIP)<<endl;
 cout<<ValueToIP(-631456472)<<endl;

 //IP为:218.92.176.82转化后 -631459758
 strIP= "218.92.176.82";
 cout<<dec<<IPToValue(strIP)<<endl;
 //cout<<hex<<IPToValue(strIP)<<endl;
 cout<<ValueToIP(-631459758)<<endl;

 return 0 ;
}

也可以使用现成的win socket函数,以下代码使用vc6.0通过:

#include "stdafx.h"
#include <iostream>
#include <winsock2.h>

#pragma comment(lib,"ws2_32.lib")
using namespace std;

int main(void)
{
    cout<<(int)htonl(inet_addr("218.92.189.40"))<<endl;//输出-631456472
    struct in_addr addr;
    addr.S_un.S_addr = ntohl(-631456472);
    cout<<inet_ntoa( addr )<<endl;//输出218.92.189.40
    return 0 ;
}

相关内容
赞助商链接