• IP地址转换


     1 /*
     2 点分十进制转32位IP
     3 */
     4 #include<iostream>
     5 #include<vector>
     6 #include<string>
     7 using namespace std;
     8 bool change2Binary(const string& str)
     9 {
    10     int arrInt[4] = {0};//存放4个IP地址整数 192.168.1.1
    11     unsigned k = 0;
    12     for (int i = 0; i < 4; i++)
    13     {
    14         while (k < str.size() && str[k] != '.')
    15         {
    16             arrInt[i] = arrInt[i] * 10 + str[k] - '0';
    17             k++;
    18         }
    19         k++;
    20     }
    21     //判断IP地址合法性
    22     for (auto c : arrInt)
    23         if (c < 0 || c>255) return false;
    24     //十进制转换成二进制
    25     for (int i = 0; i < 4; i++)
    26     {
    27         int temp = arrInt[i];
    28         vector<int> Bin(8,0);
    29         for (int j = 7; temp != 0; j--)
    30         {
    31             Bin[j] = temp % 2;
    32             temp /= 2;
    33         }
    34         for (auto t : Bin)
    35             cout << t;
    36         cout << " " <<endl;
    37     }
    38     return true;
    39 }
    40 int main(void) {
    41     string str;
    42     cin >> str;
    43     if (!change2Binary(str))
    44         cout << "data error" << endl;
    45 
    46     return 0;
    47 }
    /*
    二进制转点分十进制
    */
    #include<iostream>  
    #include<cstring>  
    using namespace std;  
    bool check(char *str);  //检查串中是否有0/1之外的字符  
    int trans(char *str);  //将0/1字符串转换成十进制  
    bool check(char *str)  
    {  
        int i;  
        for(i=0;i<32;i++)  
            if(str[i]!='1' && str[i]!='0')  
            return false;  
        return true;  
    }  
    int trans(char *str)  
    {  
        int n=0,i;  
        for(i=0;i<8;i++)  
        {  
            if(str[i]=='1')  
                n=n*2+1;  
            else  
                n=n*2;  
        }  
        return n;  
    }  
    int main()  
    {  
        char IP[33];  
        cout<<"32位二进制IP地址:"<<endl;  
        cin>>IP;  
        if(strlen(IP)!=32)  
            cout<<"IP地址长度应为32位"<<endl;  
        else  
        {  
            if(!check(IP))  
                cout<<"IP串中有0/1外字符"<<endl;  
            else  
            {  
                //四次调用trans()分别转换四组二进制数  
                cout<<"IP地址对应的点分十进制:"<<endl;  
                cout<<trans(IP)<<"."<<trans(IP+8)<<"."<<trans(IP+16)<<"."<<trans(IP+24)<<endl;  
            }  
        }  
        return 0;  
    }  
  • 相关阅读:
    JAVA多线程知识点
    RabbitMQ和Springboot集成RabbitMQ知识点
    JAVA动态代理cglib或jdk
    [转]解决System.Data.SqlClient.SqlException (0x80131904): Timeout 时间已到的问题的一个方向
    [转]C#判断文档编码格式,并读取文档数据(防止出现乱码)
    create_linux命令写入到sh脚本并删除
    cmd cd切换到d盘
    sql 优化前后
    LISTAGG()WITHIN GROUP()
    使用shell递归遍历文件并打印所有文件名的绝对路径
  • 原文地址:https://www.cnblogs.com/wsw-seu/p/8310800.html
Copyright © 2020-2023  润新知