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
プログラムを作成し、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;
}