思路:
ip范围是0~255,将每一段进行位运算,移8*(3-i)位就行了
转为string时8位一取即可
注意:需要使用unsigned int
#include <iostream>
#include <sstream>
extern std::string convert_address(unsigned int address);
extern unsigned int convert_address(std::string address);
int main()
{
std::string tmpAddress = "192.168.3.9";
unsigned int num = convert_address(tmpAddress);
std::cout << "saveIP:" << num << std::endl;
std::cout << "IP:" << convert_address(num);
return 0;
}
// string to int
unsigned int convert_address(std::string address) {
unsigned int addrInt = 0;
int i = 0;
for (i = 0; i < 3; i++) {
std::string::size_type npos = address.find(".");
if (npos == std::string::npos) {
break;
}
std::string value = address.substr(0, npos);
unsigned int tmp = std::atoi(value.c_str());
if ((tmp < 0) || (tmp > 255)) {
break;
}
addrInt += tmp << ((3 - i) * 8);
address = address.substr(npos + 1);
}
if (i != 3) {
return 0;
}
int tmp = std::atoi(address.c_str());
if ((tmp < 0) || (tmp > 255)) {
return 0;
}
addrInt += tmp;
return addrInt;
}
// int to string
std::string convert_address(unsigned int address) {
std::ostringstream stream;
stream<<((address>>24) & 0xFF)<<"."<<((address>>16) & 0xFF)<<"."
<<((address>>8) & 0xFF)<<"."<<(address & 0xFF);
return stream.str();
}
saveIP:3232236297
IP:192.168.3.9
Process returned 0 (0x0) execution time : 0.054 s
Press any key to continue.
ipAddress/gateway/dns都可以这样转