尝试用了下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;
}