题解 | #整数与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)
}