题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
#include <iostream> #include <sstream> #include <string> #include <bitset> using namespace std; unsigned IptoDe(string ip) { unsigned ipn = 0; int seg = 3;//控制左移位数 istringstream iss(ip); while (getline(iss, ip, '.'))//分段读取十进制字符 { ipn += stoi(ip) << 8 * seg;//每段字符转换成十进制整数,再经过位运算 --seg; } return ipn; } string DetoIp(unsigned ipn) { string str; string rstr; str = bitset<32>(ipn).to_string();//输入先变换成二进制字符串 for (int i = 0; i < str.size(); i += 8)//每8位字符分成一个子串 { rstr += to_string(stoi(str.substr(i, 8), nullptr, 2)); //将子串转换成十进制字符串 rstr += '.';//加入'.'分隔 } rstr = rstr.substr(0, rstr.size() - 1);//去除多出的一个'.' return rstr; } int main() { //输入 string ip; unsigned ipn;//注意ip地址是32位,unsigned int范围刚好合适 getline(cin, ip);//点分ip读入字符串 cin >> ipn;//整数ip读入unsigned整数 //变换并输出 cout << IptoDe(ip) << endl; cout << DetoIp(ipn) << endl; return 0; }