PowerShell如何将IP地址转换成二进制数?

发布时间:2020-11-26编辑:脚本学堂
本文介绍了PowerShell把IP地址转换成二进制的方法,很多时候需要将IP地址转成二进制数据以方便传输,这里分享一个例子,感兴趣的朋友参考下。

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:Usersjbxue> [System.Convert]::ToString(16,2);
10000
#八进制
PS C:Usersjbxue> [System.Convert]::ToString(16,8);
20
#十进制
PS C:Usersjbxue> [System.Convert]::ToString(16,10);
16
#十六进制
PS C:Usersjbxue> [System.Convert]::ToString(16,16);
10