IP 转换

对于IP段字符串,转换成IP数组。
例如:

"128.0.0.1-128.0.0.3"
-> ['128.0.0.1','128.0.0.2','128.0.0.3']

下面是解决方法:

let ipStr = "128.2.2.2-128.5.67.9";
let STEP = 8, PART_NUM = 4;

// 结果
let ips = parseIptoArray(ipStr)
console.log(ips)
console.log(ips[0])
console.log(ips[ips.length-1])

//IP段转换成IP数组
function parseIptoArray(ipStr) {
    let range = ipStr.split('-').map(v => ipToInt(v))
    return new Array(range[1]-range[0]+1).fill(range[0])
                    .map((v, i) => intToIp(v+i))
}

//将字符串IP转换成int类型数据
function ipToInt(ip) {
    let res = ip.split('.')
            .map(v => (+v).toString(2).padStart(STEP, 0))
            .reduce((sum, cur) => sum += cur, '')
    return parseInt(res, 2)
}

//将int类型的数据转换成ip类型字符串
function intToIp(vuale) {
    let binary = vuale.toString(2)
    return new Array(PART_NUM).fill(0)
                        .map((v,i) => parseInt(binary.substring(i*STEP, (i+1)*STEP), 2))
                        .join('.');
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值