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;
}