尝试用了下bitset,感觉还是做麻烦了
#include<bits/stdc++.h>
using namespace std;
unsigned long string2int(string str);
int string2int_2(string str);
int main(){
string str;
unsigned long n;
while(cin>>str>>n){
vector<string> vec;
size_t pos = str.find(".");
while(pos!=string::npos){
vec.push_back(str.substr(0,pos));
str= str.substr(pos+1);
pos = str.find(".");
}
vec.push_back(str);
bitset<8> b1(string2int(vec[0]));
bitset<8> b2(string2int(vec[1]));
bitset<8> b3(string2int(vec[2]));
bitset<8> b4(string2int(vec[3]));
string res = b1.to_string()+b2.to_string()+
b3.to_string()+b4.to_string();
bitset<32> b32(res);
cout<<b32.to_ulong()<<endl;
string res2="";
bitset<32> bb(n);
string tmp = bb.to_string();
int p1= (int)string2int_2(tmp.substr(0,8));
int p2= (int)string2int_2(tmp.substr(8,8));
int p3= (int)string2int_2(tmp.substr(16,8));
int p4= (int)string2int_2(tmp.substr(24,8));
res2=to_string(p1)+"."+to_string(p2)+"."+
to_string(p3)+"."+to_string(p4);
cout<<res2<<endl;
}
return 0;
}
unsigned long string2int(string str){
unsigned long res=0;
for(int i=0;i<str.size();++i){
res = res*10 + (str[i]-'0');
}
return res;
}
int string2int_2(string str){
int res=0;
for(int i=0;i<str.size();++i){
res = res*2 + (str[i]-'0');
}
return res;
}