/*
Name: IP字符串与整数的互相转化
Author: Unimen
Date: 04/10/2011 21:32
*/
/*
思路:
1、由字符串转整数,由高位挨个读取就行,每读取一个域就计算出其值,然后这样运算
第一个域:左移24位
第二个域:左移16位
第三个域:左移8位
第四个域:不用移
然后依次将所得的值相加即得最后结果
2、由整数转字符串其实很简单,int数中,每个字节对应ip地址中的一个域,因此只要能获得
整数的每个字节并做相应的转换即可,具体的做法见代码
*/
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
//IP字符串转32位int数
unsigned int IPStrToInt(const char *ip)
{
unsigned uResult = 0;
int nShift = 24;
int temp = 0;
const char *pStart = ip;
const char *pEnd = ip;
while (*pEnd != '\0')
{
while (*pEnd!='.' && *pEnd!='\0')
{
pEnd++;
}
temp = 0;
for (pStart; pStart!=pEnd; ++pStart)
{
temp = temp * 10 + *pStart - '0';
}
uResult += temp<<nShift;
nShift -= 8;
if (*pEnd == '\0')
break;
pStart = pEnd + 1;
pEnd++;
}
return uResult;
}
//将整数IP地址转换成字符串IP地址
char *IntToStr(const int ip, char *buf)
{
sprintf(buf, "%u.%u.%u.%u",
(unsigned char )*((char *)&ip + 0),
(unsigned char )*((char *)&ip + 1),
(unsigned char )*((char *)&ip + 2),
(unsigned char )*((char *)&ip + 3));
return buf;
}
int main()
{
char test[16];
int ip;
//测第一个函数字符串转int
// while (cin>>test)
// {
// cout<<IPStrToInt(test)<<endl;
// }
//测第二个函数int转字符串
while (cin>>ip)
{
cout<<IntToStr(ip, test)<<endl;
}
return 0;
}
IP地址字符串与整数的互相转化
最新推荐文章于 2025-02-09 11:34:37 发布