欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PowerShell把IP地址转换成二进制的方法

程序员文章站 2022-11-15 18:04:24
ipv4地址其实是32位二进制数字,然后我们将它分成四段,每段8位。8位二进制能表达的范围是0~255,所以点分十进制的每一个数字的取值都在0~255之间。有的时候,比如为...

ipv4地址其实是32位二进制数字,然后我们将它分成四段,每段8位。8位二进制能表达的范围是0~255,所以点分十进制的每一个数字的取值都在0~255之间。有的时候,比如为了换算子网掩码,我们需要将ip地址还原成二进制串的形式,如:11000000101010000000110000100001。今天小编看到一个例子就是来完成这个操作的。

代码如下:

复制代码 代码如下:

$ipv4 = '192.168.12.33'
-join ($ipv4.split('.') | foreach-object {[system.convert]::tostring($_,2).padleft(8,'0')})
#-join是把多个结果对象或数组元素组合在一起输出。

结果将显示为:
复制代码 代码如下:
11000000101010000000110000100001

我们也可以修改一下程序,分别显示出每一段的转换后的形式:

复制代码 代码如下:
$ipv4.split('.') | foreach-object {
   '{0,5} : {1}' -f $_, [system.convert]::tostring($_,2).padleft(8,'0')
}

结果将显示如下:
复制代码 代码如下:
192 : 11000000
 168 : 10101000
  12 : 00001100
  33 : 00100001
 
最后补充说明一下这一句“[system.convert]::tostring($_,2)”的理解。首先$_表示当前循环变量,把一个点分十进制的ip使用split方法打散后,每个循环变量就是各个数字了,即192、168、12、33。而“[system.convert]::tostring($_,2)”的意思是把这些数字转换为二进制的字符串。关于[system.convert]::tostring的详细理解,可以参数下面几个例子:
复制代码 代码如下:
#二进制
ps c:\users\小编> [system.convert]::tostring(16,2);
10000
#八进制
ps c:\users\小编> [system.convert]::tostring(16,8);
20
#十进制
ps c:\users\小编> [system.convert]::tostring(16,10);
16
#十六进制
ps c:\users\小编> [system.convert]::tostring(16,16);
10