一个有意思的js算法题

题目: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);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容