C++ 十进制点分IP转换为32位二进制IP

题目内容:

编写程序,将十进制点分的IP转换为32位二进制IP地址。程序要能验证输入的十进制点分IP地址的合法性。用户输入的IP不和法时,输出"data error"。

请使用模块化程序设计的思想,将功能模块编写成函数。通过指针传递参数,操作数据,返回结果。在主函数中输入IP地址,调用函数进行合法性验证和转换,在主函数中输出32位二进制IP。

输入格式:

十进制点分IP地址(英文句点)

输出格式:

32位二进制数(二进制字符串)

输入样例:

202.151.96.33

输出样例:

11001010100101110110000000100001

提示:十进制转换为二进制。对整数部分,除2取余,直到商为0。例如

13/2=6…1(低位)

6/2=3…0

3/2=1…1

1/2=0…1

转换后的二进制数位1101

#include 
#include 
using namespace std;
void transform(int a)
{
    int x[8]={0};
    int *p=x,n=0;//n用来计算二进制数实际长度
    while(a!=0)
    {
        *p=a%2;
        p++;n++;
        a/=2;
    }
    if(p<x+7)
    {//如果二进制数占不满8位
        for(int i=n;i<8;i++)//前面补零
            cout<<0;
        for(int i=n-1;i>=0;i--)//逆序输出
            cout<<x[i];
    }
    else
        for(int i=7;i>=0;i--)
        cout<<x[i];
}
int main()
{
    int a,b,c,d;
    scanf("%d.%d.%d.%d",&a,&b,&c,&d);//输入数据的格式是四个带符号的十进制数,用英文点隔开
    if((a>255||a<0)||(b>255||b<0)||(c>255||c<0)||(d>255||d<0))
    {
        cout<<"data error";
        return 0;
    }
    else
    {    transform(a);
         transform(b);
         transform(c);
         transform(d);
    }
    return 0;
}

你可能感兴趣的:(C++基础学习)