C++10進ポイントIPを32ビットバイナリIPに変換

8806 ワード

タイトル内容:
プログラムを作成し、10進数のIPを32ビットの2進数のIPアドレスに変換します.プログラムは入力した10進数ポイント分IPアドレスの正当性を検証できるようにしなければならない.ユーザが入力したIP不和法の場合は「data error」を出力する.
モジュール化プログラム設計の考え方を用いて,機能モジュールを関数として記述してください.ポインタでパラメータを渡し、データを操作し、結果を返します.メイン関数にIPアドレスを入力し、関数を呼び出して正当性検証と変換を行い、メイン関数に32ビットバイナリIPを出力します.
入力形式:
10進ポイント分IPアドレス(英語のピリオド)
出力フォーマット:
32ビットバイナリ(バイナリ文字列)
サンプルを入力:
202.151.96.33
出力サンプル:
11001010100101110110000000100001
ヒント:10進数をバイナリに変換します.整数部分は、商が0になるまで2を除いて残ります.たとえば
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;
}