题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// 换行就执行一遍
rl.on('line', function (line) {
// 第一遍ip地址 ,第二遍整型
if(line.includes('.')){
console.log(IpToparseInt(line))
}else{
console.log(parseIntToIp(Number(line)))
}
});
function parseIntToIp(num: number){
let str:string = handleFormat(num.toString(2), 32)
// 八位八位截取出来
const arr:number[] = []
for(let i = 0; i < str.length; i += 8){
arr.push(parseInt(str.slice(i, i + 8),2))
}
return arr.join('.')
}
function IpToparseInt(str: string){
const arr:string[] = str.split('.')
let res = ''
for(let i = 0; i < arr.length; i++){
// 将每段转成二进制
res += handleFormat(Number(arr[i]).toString(2))
}
// 将所有二进制拼接起来然后转成十进制
return parseInt(res, 2)
}
// 处理成八位一段的二进制 例如1010---》00001010
function handleFormat(arg: string, num=8){
if(arg.length >= 8 && num === 8){
return arg
}else {
return '0'.repeat(num - arg.length) + arg
}
}
