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

整数与IP地址间的转换

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

没有位移操作,4*8 32位数的ip转来转去
十进制转IP 4*8=32位二进制 1.十转二,2.32位前缀补0 3.8个长度拆分,二转十
IPz转十 //8位数前缀补0,十转二
const readline = require("readline");

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});
let inputArr = []
rl.on("line"function (line) {
   inputArr.push(line)
   if(inputArr.length == 2){
       toDecimal(inputArr[0])
       toIp(inputArr[1])
   }
});
//十进制转IP 4*8=32位二进制 1.十转二,2.32位前缀补0 3.8个长度拆分,二转十
function toIp(str){
    //十转二
    let bina = Number(str).toString(2).padStart(32,"0");
    let res = new Array(4)
    for(let i = 0 ; i < 4;i++){
        let startIndex = i*8
        let sub =bina.substring(startIndex,startIndex+8)
        //二转十
        res[i] = parseInt(sub,2)
    }
    console.log(res.join('.'))

}
// ip转十进制
function toDecimal(str){
    let arr = str.split(".")
    //8位数前缀补0,十转其它
    let res = []
    arr.forEach(c=>{
        
     let binary = Number(c).toString(2)
     let whole = binary.padStart(8,"0")
     res.push(whole)
    })
    //二转十
    res = parseInt(res.join(''),2)
    console.log(res)
}
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务