题目:IP地址和数字之间的转换
给定 IP address: 10.0.3.193
10 --> 00001010
0 --> 00000000
3 --> 00000011
193 --> 11000001
得到
00001010 00000000 00000011 11000001
转换为10进制数为
167773121
同样给定数字167773121,也要得到ip地址10.0.3.193
我写的函数如下:
function numberAndIPaddress(s){
if(s.indexOf(".")>0){
var arr=s.split(".").map(function(value,index){
return padNumber(Number(value).toString(2),8);
});
return ""+parseInt(arr.join(""),2);
}else{
reg=/\d{8}/g
var arr =padNumber(Number(s).toString(2),32).match(reg);
var result=arr.map(function(value){
return parseInt(Number(value),2);
});
return result.join(".");
}
}
function padNumber(num, fill) {
var len = ('' + num).length;
return (Array(
fill > len ? fill - len + 1 || 0 : 0
).join(0) + num);
}
罗列知识点
- 判断是ip地址还是数字
s.indexOf('.')>0
- 数字转化为2进制数
数字.toString(2);
- 数字补齐位数,不足的用字符补齐补齐
function padNumber(num, fill,sep) {
var len = ('' + num).length;
return (Array(
fill > len ? fill - len + 1 || 0 : 0
).join(sep) + num);//不足用参数传的sep填充
}
- 转化成十进制数
parseInt(number,2);//2进制数变十进制
- 字符串按位数切割(数字字符串)
reg=/\d{8}/g;//8位数字进行切割
var arr =s.match(reg);
网友评论