免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4318 | 回复: 1
打印 上一主题 下一主题

ip地址转换 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2013-08-07 00:28 |显示全部楼层
本帖最后由 zhoufengjie848 于 2013-08-07 00:38 编辑

我写了一个,希望能够帮到你【在centos 5.8下面写的】:

=========start=========

#!/bin/bash

ip="1.2.3.4"

function ipnum10to2(){
   num10=$1
   num2=`echo "obase=2;$num10"|bc`
   num2len=`echo $num2|wc -c`
   while [ $num2len -le 8 ]
   do
      num2="0"$num2
      num2len=`echo $num2|wc -c`
   done
   echo $num2
}

function ip10to2(){
   ip=$1
   read -a ipsub <<< ${ip//./ };
   for num in {0..3}
   do
      ip2=$ip2`ipnum10to2 ${ipsub[$num]}`
   done
   echo $ip2
}

result=`ip10to2 $ip`
echo $result

=========stop=========

输出结果如:
00000001000000100000001100000100
如果不想要全位的话,可以把上面的while函数去掉;
对于bc行,也可以用dc来实现,
比如:echo -n 数字 进制 o p | dc
样例:
[fengjie.zhou@TYUMEN-rpmmake tmp]$ echo -n 4 2 o p | dc   
100

论坛徽章:
0
2 [报告]
发表于 2013-08-11 01:47 |显示全部楼层
回复 8# ruifeng_


#!/bin/bash

ip="1.2.3.4"  #输入,可以通过参数输入,以$1接收

function ipnum10to2(){  #10进制转换2进制函数
   num10=$1               #接收此函数的第一个输入值
   num2=`echo "obase=2;$num10"|bc`  #将输入值转换成2进制
   num2len=`echo $num2|wc -c`    #统计一下2进制长度【为了cidr的8位长度做计算】
   while [ $num2len -le 8 ]   #将字符补齐8位
   do
      num2="0"$num2
      num2len=`echo $num2|wc -c`
   done
   echo $num2
}

function ip10to2(){   #十进制转二进制主函数
   ip=$1  #接收输入的ip地址
   read -a ipsub <<< ${ip//./ };  #将ip地址以.分割放到ipsub数值里面
   for num in {0..3}
   do
      ip2=$ip2`ipnum10to2 ${ipsub[$num]}`  #依次取数组0,1,2,3四个值,并调用ipnum10to2函数转换成二进制,并合并到一串
   done
   echo $ip2  #输出转换结果,之所以没有用return,是因为return会再次把二进制做转换;
}

result=`ip10to2 $ip`  #触发ip10to2函数,并把结果输入给result变量
echo $result  #输出结果
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP