题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
unsigned isIpv4(string input){
stringstream iss(input);
string temp;
unsigned m = 0;
vector<int> ipv4_array;
while(getline(iss, temp, '.')){
m = (m<<8) + stoi(temp);
ipv4_array.emplace_back(stoi(temp));
}
//将数组转化为整数
unsigned int output = 0;
for(int i = 0; i < ipv4_array.size(); i++) {
int n = ipv4_array[i];
output += n << (8 * (3 - i));
}
return output;
}
string isNums(unsigned num){
string temp;
string output = "";
output += to_string((num >> 24) & 0xff); //取第一个八位二进制转换成字符
output += ".";
output += to_string((num >> 16) & 0xff); //取第二个八位二进制转换成字符
output += ".";
output += to_string((num >> 8) & 0xff); //取第三个八位二进制转换成字符
output += ".";
output += to_string(num & 0xff); //取第四个八位二进制转换成字符
return output;
}
int main() {
string str_ipv4;
unsigned str_nums;
while (cin >>str_ipv4 >> str_nums) { // 注意 while 处理多个 case
//Task1:根据'.'对str_ipv4进行分割
unsigned ipv4_to_nums = isIpv4(str_ipv4);
cout << ipv4_to_nums << endl;
//Task2:将整数转换为IP地址输出
string nums_to_ipv4 = isNums(str_nums);
cout << nums_to_ipv4 << endl;
}
return 0;
}

