题解 | #整数与IP地址间的转换#

整数与IP地址间的转换

http://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea

#include <iostream>
#include <string>
#include <vector>
#include <array>

using namespace std;

/*
思路:根据'.'截取每段数字存储于vecotr<string>,转化int类型,再 取模2与除商2转化二进制,再转成10进制(1*1  + 1*4+ 1*8 + ...),
最后转成string,

*/
long IpConverDecimal(string ipAddr)
{
    array<long, 4> arrNum{0};
    int point = 0;
    for(int i = 0; i < ipAddr.length(); i++) {
        if(ipAddr[i] != '.') {
            arrNum[point] = arrNum[point]*10 + ipAddr[i] - '0';
        } else {
            point++;
        }
    }
    long deciValue = arrNum[0] << 24 | arrNum[1] << 16 | arrNum[2] << 8 | arrNum[3]; //位运算
    return deciValue;
}

/*
思路:将字符串转成int, 取模2与除商2转化二进制,8位二进制转化十进制,得到对应一段数字,字段+‘.’+字段 后得到IP地址
*/
string DecimalConverIp(int deciValue)
{
    string ipAddr;
    ipAddr += to_string((deciValue >> 24) & 0xff); //第1个八位二进制转化字符
    ipAddr += '.';
    ipAddr += to_string((deciValue >> 16) & 0xff); //第2个八位二进制转化字符
    ipAddr += '.';
    ipAddr += to_string((deciValue >> 8) & 0xff); //第3个八位二进制转化字符
    ipAddr += '.';
    ipAddr += to_string(deciValue  & 0xff); //第4个八位二进制转化字符
    return ipAddr;
    
}

int main()
{
    string ipAddr;
    long decimalValue;
    while(cin>>ipAddr>>decimalValue) {
        cout<<IpConverDecimal(ipAddr)<<endl;
        cout<<DecimalConverIp(decimalValue)<<endl;
    }
}
全部评论

相关推荐

09-18 20:41
门头沟学院 Java
要个offer怎么这...:哈哈哈哈哈哈,我也拿了0x10000000个offer,秋招温啦啦啦,好开心
我的秋招日记
点赞 评论 收藏
分享
想玩飞盘的菠萝蜜在春...:上交✌🏻也拒?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务