对于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('.');
}