举例:一个ip地址为10.0.3.193
每段数字 | 对应的二进制数 |
10 | 00001010 |
0 | 00000000 |
3 | 00000011 |
193 | 11000001 |
组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121
数据范围:保证输入的是合法的 IP 序列
输入
10.0.3.193
167969729
输出
167773121
10.3.3.193
/***
* @Description:
* @version: 0.1.0
* @Author: Panda-Young
* @Date: 2022-07-03 10:59:40
* @Copyright (c) 2022 by Panda-Young, All Rights Reserved.
*/
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <cmath>
using namespace std;
vector<int> dec_to_bin(int n, vector<int>& ans, int bit)
{
for (int i = bit - 1; i >= 0; i--) {
ans.push_back((n >> i) & 1);
}
return ans;
}
int main ()
{
string ip_str;
getline(cin, ip_str);
stringstream ss(ip_str); // 接收ip字符串 192.168.1.1
string s; // 临时变量 存放切分的4个字符子串
vector<int> vec; // 存放十进制数字 192 168 1 1
vector<int> tmp; // 临时变量 存放十进制转换的二进制
size_t res = 0; // ip转换后的整数
while (getline(ss, s, '.')) {
vec.push_back(atoi(s.c_str()));
}
for (int i = 0; i < 4; i++) {
dec_to_bin(vec[i], tmp, 8);
for (int j = 0; j < 8; j++) {
res += tmp[j] * pow(2, 32 - (i * 8 + j) -1);
}
tmp.clear();
}
cout << res << endl;
cin >> res;
dec_to_bin(res, tmp, 32);
int aa = 0;
for (int i = 0; i < 32; i++) {
// cout << tmp[i];
aa += tmp[i] * pow(2, 7 - i % 8);
if (i != 31 && (i + 1) % 8 == 0) {
cout << aa << '.';
// cout << ' ';
aa = 0;
}
}
cout << aa << endl;
return 0;
}