题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
#include <iostream>
#include <sstream>
#include <string>
#include <bitset>
#include <vector>
using namespace std;
//IP地址转十进制
long convertNum(string &str)
{
istringstream iss(str);
string token;
string strs;
while(getline(iss, token, '.'))
{
//将每个整数转换成8位二进制数
strs += bitset<8>(stol(token)).to_string();
}
//最后将组合而成的32位进制数转换成十进制数
return stol(strs, nullptr, 2);
}
//十进制转成IP地址
string convertIP(string &str)
{
//将相应的数转换成32位二进制
string ans;
int point =3;
str =bitset<32>(stol(str)).to_string();
for(int i=0;i<str.size();i+=8)
{
//每次取8位,转换成整数
string s=str.substr(i,8);
ans += to_string(stoi(s,nullptr,2));
if(point > 0 )
{
ans +='.';
point--;
}
}
return ans;
}
int main()
{
string str1,str2;
while(cin>>str1>>str2)
{
long ans= convertNum(str1);
cout<<ans<<endl;
string IP=convertIP(str2);
cout<<IP<<endl;
}
return 0;
}