HJ33 整数与IP地址间的转换

本文介绍了一种将IPv4地址从十进制形式转换为二进制,并进一步转换为另一种十进制整数形式的方法。同时展示了如何将十进制整数反向转换回IPv4地址的过程。通过具体的代码实现,帮助读者理解IP地址转换背后的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

举例:一个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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值