题解 | #整数与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;
}

全部评论

相关推荐

12-13 12:11
复旦大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务